Save outputs of nested for loops in MATLAB -
i have following codes wish have output matrix rpp of (10201,3). run code (which takes bit long) check matrix size of rpp , see (1,3), tried many things couldn't find proper way. logic of codes take 6 values (contain 4 constant values , 2 variable values (chosen 101 values)) , make calculation 3 different i1 , store every output vector of 3 in matrix (101*101 (pairs of 2 variable values)) rows , 3 (for each i1) columns.
i appreciate help
vp1=linspace(3000,3500,101); vp2=3850; rho1=2390; rho2=2510; vs1=linspace(1250,1750,101); vs2=2000; i1=[10 25 40]; rpp = zeros(length(vp1)*length(vs1),length (i1)); n=1:length(vp1)*length(vs1) m=1:length (i1) l=1:length(vp1) k=1:length(vs1) p=sin(i1)/vp1(l); i2=asin(p*vp2); j1=asin(p*vs1(k)); j2=asin(p*vs2); a=rho2*(1-2*vs2^2*p.^2)-rho1*(1-2*vs1(k).^2*p.^2); b=rho2*(1-2*vs2^2*p.^2)+2*rho1*vs1(k)^2*p.^2; c=rho1*(1-2*vs1(k)^2*p.^2)+2*rho2*vs2^2*p.^2; d=2*(rho2*vs2^2-rho1*vs1(k)^2); e=b.*cos(i1)./vp1(l)+c.*cos(i2)/vp2; f=b.*cos(j1)./vs1(k)+c.*cos(j2)/vs2; g=a-d*(cos(i1)/vp1(l)).*(cos(j2)/vs2); h=a-d*(cos(i2)/vp2).*(cos(j1)/vs1(k)); d=e.*f+g.*h.*p.^2; rpp=((b.*(cos(i1)/vp1(l))-c.*cos((i2)/vp2)).*f-(a+d*((cos(i1)/vp1(l))).*(cos(j2)/vs2)).*h.*p.^2)./d end end end end
the way use loop wrong. you're running calculation length(vp1)*length(vs1)
* length (i1)
* length(vp1)
* length(vs1)
times. here's correct way. changed l
lll
won't confuse number 1. in each iteration of first loop, you're running length(vs1)
times, , need assign result (a 1x3 array) rpp
using row number specified k+(lll-1)*length(vp1)
.
for lll=1:length(vp1) k=1:length(vs1) p=sin(i1)/vp1(lll); i2=asin(p*vp2); j1=asin(p*vs1(k)); j2=asin(p*vs2); a=rho2*(1-2*vs2^2*p.^2)-rho1*(1-2*vs1(k).^2*p.^2); b=rho2*(1-2*vs2^2*p.^2)+2*rho1*vs1(k)^2*p.^2; c=rho1*(1-2*vs1(k)^2*p.^2)+2*rho2*vs2^2*p.^2; d=2*(rho2*vs2^2-rho1*vs1(k)^2); e=b.*cos(i1)./vp1(lll)+c.*cos(i2)/vp2; f=b.*cos(j1)./vs1(k)+c.*cos(j2)/vs2; g=a-d*(cos(i1)/vp1(lll)).*(cos(j2)/vs2); h=a-d*(cos(i2)/vp2).*(cos(j1)/vs1(k)); d=e.*f+g.*h.*p.^2; rpp(k+(lll-1)*length(vp1),:)=((b.*(cos(i1)/vp1(lll))-c.*cos((i2)/vp2)).*f-(a+d*((cos(i1)/vp1(lll))).*(cos(j2)/vs2)).*h.*p.^2)./d; end end
Comments
Post a Comment