Reduce computational time for nested for loops
Show older comments
Hi all
I wondered how could I reduce computational time for this for loop:
for i=1:length(Lungh)
for j=i:length(Largh)
for k=1:length(T)
for w=1:length(Delta)
for av=1:length(A_deg_prua_verticale)
for h=1:length(H)
for b=1:length(B)
for ti=1:length(t)
if abs(CB(i,j,k,w)>0)
if Largh(j)<Lungh(i)
if T(k)<Lungh(i)
L_cb(i)=Lungh(i);
Larg_cb(j)=Largh(j);
T_cb(k)=T(k);
Dead_rise(k,j)=atand(Largh(j)/(2* T_cb(k)));
Delta_cb(w)=Delta(w);
H_triangolo(k,av)=(T_cb(k))*tand(A_deg_prua_verticale(av));
Aw_d(i,k,av)=(L_cb(i)-H_triangolo(k,av))*Larg_cb(j)+(Larg_cb(j)* H_triangolo(k,av)/2);
Awc(i,k,av)=2*Aw_d(i,k,av);
Cw(i,j,k,av)= Aw_d(i,k,av)/(L_cb(i)*Larg_cb(j));
Zc(i,j,k,w,av)=T_cb(k)/(1+(CB(i,j,k,w)/Cw(i,j,k,av)));
Ix_demihull(i,j,k,w,av)=(W_tonn(w)/(2*gamma))*((Cw(i,j,k,av)^2)*...
(Larg_cb(j)^2))/(11.4*CB(i,j,k,w)*T_cb(k));
Ix_upper(j,h,ti,b)=(B(b)-2*Larg_cb(j))*(((t(ti)^3)/3)+t(ti)*H(h)^2-H(h)*t(ti)^2);
Ix(i,j,k,w,av,h,ti,b)=2*Ix_demihull(i,j,k,w,av)+Ix_upper(j,h,ti,b);
ZG(j,k,h,ti,b)=((Largh(j)*H(h)^2)-(Largh(j)*T_cb(k)^2)+(B(b)*(H(h)^2)/2)-B(b)*(H(h)^2+t(ti)^2-2*H(h)*t(ti))/2-(Largh(j)*H(h)^2)+...
Largh(j)*(H(h)^2+t(ti)^2-2*H(h)*t(ti))+4*tand(Dead_rise(k,j))*(T_cb(k)^3)/3)/...
((Largh(j)*T_cb(k)^2)+2*Largh(j)*(H(h)-t(ti)-T_cb(k))+(2*((B(b)/2)-Largh(j))*t(ti)));
Iy(i,j,k,w,av)=0.07*(Cw(i,j,k,av)/9.81)*W_tonn(w)*L_cb(i)^2;
Delta_Iy(i,j,k,av)=0.055*(gamma/9.81)*(Larg_cb(j)^2)*...
(L_cb(i)^3)*(Cw(i,j,k,av)^2)/((3-2*Cw(i,j,k,av))*(3-Cw(i,j,k,av)));
if Zc(i,j,k,w,av)<ZG(j,k,h,ti,b)&&Zc(i,j,k,w,av)>0&&ZG(j,k,h,ti,b)>0&&ZG(j,k,h,ti,b)<H(h)&&Zc(i,j,k,w,av)<H(h)
Z_C(i,j,k,w,av)=Zc(i,j,k,w,av);
Z_G(j,k,h,ti,b)=ZG(j,k,h,ti,b);
end
R(i,j,k,w,av)=(Cw(i,j,k,av)^2)*(L_cb(i)^2)/(14*CB(i,j,k,w)*T_cb(k));
H_L(i,j,k,w,av,h,ti,b)=R(i,j,k,w,av)+Z_C(i,j,k,w,av)-Z_G(j,k,h,ti,b);
kd(j,b)=((B(b)/2)-Largh(j))+(Largh(j)/2);
GM(i,j,k,w,av,h,ti,b)=(2*gamma*(Ix_demihull(i,j,k,w,av)+(kd(j,b)^2)*...
(Aw_d(i,k,av)))/(W_tonn(w)))+Z_C(i,j,k,w,av)-Z_G(j,k,h,ti,b);
if GM(i,j,k,w,av,h,ti,b)>0&&H_L(i,j,k,w,av,h,ti,b)>0
T_teta(i,j,k,w,av,h,ti,b)=(1/(2*pi))*(sqrt(Ix(i,j,k,w,av,h,ti,b)/(W_tonn(w)*GM(i,j,k,w,av,h,ti,b)))) ;
T_p(i,j,k,w,av,h,ti,b)=2*pi*sqrt((Iy(i,j,k,w,av))/(W_tonn(w)*H_L(i,j,k,w,av,h,ti,b)));
T_heaving(i,k,w,av)=2*pi*sqrt(W_tonn(w)/(9.81*gamma*Awc(i,k,av)));
if T_teta(i,j,k,w,av,h,ti,b)>0.2
T_teta_finale(i,j,k,w,av,h,ti,b)=T_teta(i,j,k,w,av,h,ti,b);
T_p_finale(i,j,k,w,av,h,ti,b)=T_p(i,j,k,w,av,h,ti,b);
T_heaving_finale(i,k,w,av)=T_heaving(i,k,w,av);
end
end
end
end
end
end
end
end
end
end
end
end
end
where length(Lungh) = 6, length(Largh)=9, length(T)=5, length(Delta)=7, length(A_deg_prua_verticale)=9, length(H)=11, length(B)=3, length(t)=3
Thank you for the help
Regards!
Accepted Answer
More Answers (0)
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!