Another Noob MATLAB Question - For loop

  • Thread starter Thread starter GreenPrint
  • Start date Start date
  • Tags Tags
    Loop Matlab Noob
Click For Summary
The discussion revolves around using MATLAB to create a list of prime numbers below 100 and then multiplying adjacent primes using a for loop. A user shared their initial code, which produced the desired output but raised questions about the necessity of redefining the variable 'b' within the loop. Responses highlighted that 'b' should not be reassigned inside the loop, as it leads to confusion and incorrect behavior. Suggestions were made to define 'b' outside the loop and use a separate index for iteration to avoid issues. The conversation ultimately clarified the proper structure for using for loops in MATLAB.
GreenPrint
Messages
1,186
Reaction score
0

Homework Statement



Use the primes function to create a list of all the primes below 100. Now use a for loop to multiply adjacent values together. For example the first 4 primes numbers are

2 3 5 7

your calculation would be

2*3 3*5 5*7

which gives

6 15 35

Homework Equations





The Attempt at a Solution


Ok I spent a very long time trying to solve this problem. I eventually solved it with the following program.

PLEASE CHECK SECOND POST
i uploaded a easier version to read, i myself couldn't stand even looking at my program below so i took a snip of it in a easier to read form

z=0;
a=length(primes(100));
for b=primes(100);
if z>1;
y=y-1;
else
y=a;
end
b=primes(100);
c(y)=b(y).*b(y-1);
z=z+1;
end
d=find(c>0);
c(d)


which produces the following results, just the way I wanted them to

ans =

Columns 1 through 9

6 15 35 77 143 221 323 437 667

Columns 10 through 18

899 1147 1517 1763 2021 2491 3127 3599 4087

Columns 19 through 24

4757 5183 5767 6557 7387 8633

my only question and concern is why in my program must I include b=primes(100); after the end statement? I thought it was enough for me to just define it once and only once after the for command? I however noticed when I did so that b would get defined as 2 for some strange reason and that's it not what primes(100) is suppose to produce.

I was hoping someone could explain this to me. Thanks in advance!
 
Last edited:
Physics news on Phys.org
Check attachments
 

Attachments

  • Capture.JPG
    Capture.JPG
    7.9 KB · Views: 1,335
Hm.

You don't define b as a vector before the loop, you just run through it in the for loop, so b in the loop takes on a integer value, and not a vector.

Generally: don't use b as running variable in loop, while re-assigning it a value IN the loop. Bound for troubles.


Define b before the for loop, and use a running variable i=1:1:a in the for loop.

HTH
 
Hi Greenprint, use "code" tags to preserve formatting in posts.

That's really bad use of a for loop as outlined by Laiva above. Set up your for loop limits before the loop, something like the following.
Code:
p=primes(100);
sp=max(size(p))-1;
for k=1:sp
   pp(k)=p(k)*p(k+1);
end
 
Last edited:
thanks I think I better understand the loop commands now =)
 

Similar threads

  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 3 ·
Replies
3
Views
23K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 2 ·
Replies
2
Views
7K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
4K