Is there any alternative to if statements inside for loops?
Mostrar comentarios más antiguos
Hello, my code has many parts like this :
for i=1:8760
for j=1:Ni
if Ns*Vm(i) < Vi_min
Pin(i,j) = 0;
else
if year==1
r_y=0;
else
r_y=r_pv;
end
eta_m=eta_mppt(Ns*Np*Pm(i));
Pin(i,j) = (1 - As_I(i,j)*SIF/Ns*Np*Lpv1*Lpv2)*(1-n_l_dc*PL_dc)*Ns*Np*eta_m*(1 - r_y*year)*Pm(i);
end
end
end
It takes a long time to execute due to the if statement inside for loops. I would like to ask if there is an alternate implementation to that. Thanks
1 comentario
James Tursa
el 17 de Mayo de 2012
Please use formatting for your question so we can read the code.
Respuesta aceptada
Más respuestas (3)
Dr. Seis
el 17 de Mayo de 2012
Do you pre-allocated "Pin", if not... then before the for-loops put:
Pin = zeros(8760,Ni);
The inside of your for-loops will become:
if Ns*Vm(i) >= Vi_min
if year==1
r_y=0;
else
r_y=r_pv;
end
eta_m=eta_mppt(Ns*Np*Pm(i));
Pin(i,j) = (1 - As_I(i,j)*SIF/Ns*Np*Lpv1*Lpv2)*...
(1-n_l_dc*PL_dc)*Ns*Np*eta_m*(1 - r_y*year)*Pm(i);
end
That should help run-time a bit.
Jan
el 17 de Mayo de 2012
The if -condition does not depend on the counter of the inner loop:
for j=1:Ni
if Ns*Vm(i) < Vi_min
Then you can move it outside:
if Ns*Vm(i) >= Vi_min
for j=1:Ni
The pre-allocation mentioned by Elige will be more important.
Theo
el 17 de Mayo de 2012
1 comentario
Walter Roberson
el 17 de Mayo de 2012
Well, for example, you can replace
for i=1:8760
if P_plant(i)>P_plant_max
P_plant(i) = P_plant_max;
end
end
with
P_plant = min(P_plant, P_plant_max);
with no loop.
Likewise, consider
Pin = max(Pin,0);
Categorías
Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!