Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

repeat a loop for 10 times

Asked by christiana

christiana (view profile)

on 30 Jan 2013

I try to create a loop for which I want to be repeated 10 times. 10 times are enough iterations in order to have at last a constant number.

The loop I create is the following.

I suppose for L_repeat a number (-9999) and after 10 iterations I expect to have the solution in the equation of L_repeat. At the end of each iteration the solution of the equation of L_repeat will be the numbers used in the beginning of the next iteration.

for iterations=10

    L_repeat=[-9999; -9999; -9999; -9999; -9999; -9999; -9999; -9999]
    esh_repeat=zm./L_repeat
    if Ri_zm(:,1)<0
        phi_m_repeat=(1-19.3.*esh_repeat).^(-1/4)
        phi_H_repeat=0.95.*((1-11.6.*esh_repeat).^(-1/2))
    else if Ri_zm(:,1)>0 & Ri_zm(:,1)<=0.2
            phi_m_repeat=1+6.*esh_repeat
            phi_H_repeat=0.95+(7.8.*esh_repeat)
        end
    end
    % neutral
    % φm(ς)=φΗ(ς)= φΕ(ς)=1
    if Ri_zm(:,1)<=0.01 & Ri_zm(:,1)>=-0.01
        u_star_repeat=0.40./p_u(:,1)
        theta_star_repeat=0.40./p_theta(:,1)
    % unstable και stable (Ri<=0.2)
    else if Ri_zm(:,1)<-0.01 | Ri_zm(:,1)>0.01 & Ri_zm(:,1)<=0.2
    u_star_repeat=0.40./(p_u(:,1).*phi_m_repeat(:,1))
    theta_star_repeat=0.40./(p_theta(:,1).*phi_H_repeat(:,1))
        end
    end
    L_repeat=((u_star_repeat.^2).*theta_horizontal_mean)./(0.40.*9.80665.*theta_star_repeat)

end

3 Comments

Matt Kindig

Matt Kindig (view profile)

on 30 Jan 2013

I'm confused. Won't your last line (L_repeat=...) be overwritten at the beginning of the next iteration?

christiana

christiana (view profile)

on 30 Jan 2013

Exactly. This new loop is very close to that I want. But somewhere I am wrong.

for j=1:9

    j=j+1
    L_repeat(:,1)=[-9999; -9999; -9999; -9999; -9999; -9999; -9999; -9999]
    esh_repeat=zm./L_repeat(:,j)
    if Ri_zm(:,1)<0
        phi_m_repeat=(1-19.3.*esh_repeat).^(-1/4)
        phi_H_repeat=0.95.*((1-11.6.*esh_repeat).^(-1/2))
    else if Ri_zm(:,1)>0 & Ri_zm(:,1)<=0.2
            phi_m_repeat=1+6.*esh_repeat
            phi_H_repeat=0.95+(7.8.*esh_repeat)
        end
    end
    % neutral
    % φm(ς)=φΗ(ς)= φΕ(ς)=1
    if Ri_zm(:,1)<=0.01 & Ri_zm(:,1)>=-0.01
        u_star_repeat=0.40./p_u(:,1)
        theta_star_repeat=0.40./p_theta(:,1)
    % unstable και stable (Ri<=0.2)
    else if Ri_zm(:,1)<-0.01 | Ri_zm(:,1)>0.01 & Ri_zm(:,1)<=0.2
    u_star_repeat=0.40./(p_u(:,1).*phi_m_repeat(:,1))
    theta_star_repeat=0.40./(p_theta(:,1).*phi_H_repeat(:,1))
        end
    end
    L_repeat(:,j)=((u_star_repeat.^2).*theta_horizontal_mean)./(0.40.*9.80665.*theta_star_repeat)

end

christiana

christiana (view profile)

on 30 Jan 2013

I think this loop works. This is the answer.

for j=1:10

    L_repeat(:,j)=((u_star_repeat.^2).*theta_horizontal_mean)./(0.40.*9.80665.*theta_star_repeat)
    L_repeat(:,1)=[-9999; -9999; -9999; -9999; -9999; -9999; -9999; -9999]
    esh_repeat=zm./L_repeat(:,j)
    if Ri_zm(:,1)<0
        phi_m_repeat=(1-19.3.*esh_repeat).^(-1/4)
        phi_H_repeat=0.95.*((1-11.6.*esh_repeat).^(-1/2))
    else if Ri_zm(:,1)>0 & Ri_zm(:,1)<=0.2
            phi_m_repeat=1+6.*esh_repeat
            phi_H_repeat=0.95+(7.8.*esh_repeat)
        end
    end
    % neutral
    % φm(ς)=φΗ(ς)= φΕ(ς)=1
    if Ri_zm(:,1)<=0.01 & Ri_zm(:,1)>=-0.01
        u_star_repeat=0.40./p_u(:,1)
        theta_star_repeat=0.40./p_theta(:,1)
    % unstable και stable (Ri<=0.2)
    else if Ri_zm(:,1)<-0.01 | Ri_zm(:,1)>0.01 & Ri_zm(:,1)<=0.2
    u_star_repeat=0.40./(p_u(:,1).*phi_m_repeat(:,1))
    theta_star_repeat=0.40./(p_theta(:,1).*phi_H_repeat(:,1))
        end
    end

end

christiana

christiana (view profile)

Products

No products are associated with this question.

1 Answer

Answer by Cedric Wannaz

Cedric Wannaz (view profile)

on 30 Jan 2013
Edited by Cedric Wannaz

Cedric Wannaz (view profile)

on 30 Jan 2013

Your for loop statement is not built correctly:

 for iterations=10

will just give iterations the value 10 and will execute what follows only once. You have to have a vector of values on the right hand side, that defines all the values that the loop variable has to take iteratively. For example:

 for iterations = 1 : 10
    ...
 end

I have a doubt about the rest of the code as well. My advice would be to build it progressively, displaying what happens. For example, make a first step:

 for ii = 1 : 10
    ii
 end

and observe what happens. Then add a first, small computation in the loop, and check again that it is working, until you have implemented the full code in a well controlled way.

2 Comments

christiana

christiana (view profile)

on 30 Jan 2013

The folowing loop works better. I have a table L_repeat(i,j). At the beginning I give values for the 1st column L_repeat(:,1). At the end of each loop I expect to add one more column in the "L_repeat" table and use this new column for calculations in this loop. After 10 iterations I expext to have the final results in the column L_repeat(:,10).

Any mistake in this new loop?

for j=1:9

    j=j+1
    L_repeat(:,1)=[-9999; -9999; -9999; -9999; -9999; -9999; -9999; -9999]
    esh_repeat=zm./L_repeat(:,j)
    if Ri_zm(:,1)<0
        phi_m_repeat=(1-19.3.*esh_repeat).^(-1/4)
        phi_H_repeat=0.95.*((1-11.6.*esh_repeat).^(-1/2))
    else if Ri_zm(:,1)>0 & Ri_zm(:,1)<=0.2
            phi_m_repeat=1+6.*esh_repeat
            phi_H_repeat=0.95+(7.8.*esh_repeat)
        end
    end
    % neutral
    % φm(ς)=φΗ(ς)= φΕ(ς)=1
    if Ri_zm(:,1)<=0.01 & Ri_zm(:,1)>=-0.01
        u_star_repeat=0.40./p_u(:,1)
        theta_star_repeat=0.40./p_theta(:,1)
    % unstable και stable (Ri<=0.2)
    else if Ri_zm(:,1)<-0.01 | Ri_zm(:,1)>0.01 & Ri_zm(:,1)<=0.2
    u_star_repeat=0.40./(p_u(:,1).*phi_m_repeat(:,1))
    theta_star_repeat=0.40./(p_theta(:,1).*phi_H_repeat(:,1))
        end
    end
    L_repeat(:,j)=((u_star_repeat.^2).*theta_horizontal_mean)./(0.40.*9.80665.*theta_star_repeat)

end

Cedric Wannaz

Cedric Wannaz (view profile)

on 30 Jan 2013

If you just test

 for ii = 1 : 10
    ii
 end

You will see that the for loop iterates ii already. No need to do it yourself (with j=j+1). For the rest, I stick to my comment, that you should start with just a simple loop, and then progressively implement your computations, checking that each step produces the correct output.

Just a few additional remarks: for a purpose of efficiency, you could preallocate memory for L_repeat, before starting the loop. Also, you don't need to set L_repeat(:,1) at each step of your iteration.

 L_repeat = zeros(8,10) ;
 L_repeat(:,1) = -9999 ;
 for jj = 2 : 10
    L_repeat(:,jj) = ... something computed from L_repeat(:,jj-1) ?
 end
Cedric Wannaz

Cedric Wannaz (view profile)

Contact us