我想将此double for循环矢量化,因为它是我的代码中的瓶颈。由于Matlab是基于酮索引语言我要创建为M = 0。在Matlab中使用矢量化循环进行双加总
R,R,λ-附加项是常数
犿(L,M),CLM(L,M)是矩阵70x70
PLM(L,M)是一个矩阵70x71
CL(L),PL(L)是矢量70x1
% function dU_r
s1 = 0;
for L = 2:70
s1 = s1 + ((R/r)^L)*(L+1)*Pl(L)*Cl(L);
for m = 1:L
s1 = s1 + ((R/r)^L)*(L+1)*Plm(L,M)*(Clm(L,M)*...
cos(M*lambda) + Slm(L,M)*sin(M*lambda));
end
end
dU_r = -(mu_p/(r^2))*s1;
% function dU_phi
s2=0;
for L = 2:70
s2 = s2 + ((R/r)^L))*Plm(L,1)*Cl(L);
for m = 1:l
s2 = s2 + ((R/r)^L)*(Plm(L,M+1)-M*tan(phi)*Plm(L,M))*...
(Clm(L,M)*cos(M*lambda) + Slm(L,M)*sin(M*lambda));
end;
end;
dU_phi = (mu_p/r)*s2;
% function dU_lambda
s3=0;
for L=2:70
for m=1:L
s3 = s3 + ((R/r)^L)*M*Plm(L,M)*(Slm(L,M)*cos(M*lambda)...
- Clm(L,M)*sin(M*lambda));
end;
dU_lambda = (mu_p/r)*s3;
有几个错误:1)你需要索引'Rrl'用'1-1'的而不是环'l'。 2)乘以余弦项的系数和“Plm”也乘以正弦项(注意问题中的括号)。 – gnovice 2011-05-31 04:39:08
非常感谢您的帮助。干杯。 – julian 2011-05-31 08:44:30
@gnovice:我很感激你的代码的更正。干杯。 – julian 2011-05-31 08:45:44