我还是不是很明白你要做什么,你这个程序写的我有点看不懂。但有点建议,一:你这个应该没有必要用符号计算,符号计算很慢。二:你这个程序编写的不怎样,基础不是很好,写的有C语言的感觉,可能你的想法你没用程序表达出来,要不你说说你要干啥吧,我看能不能帮你。话说直了点,望不怪。

下面是我没用符号计算程序,速度快了很多,但是还是存在错误,出不了结果,因为我还是没有理解你要干啥。

j=1;z=20;r=32;

for l=32:34   %设定范围

i=1;  tezheng=0;

for rad=0:l; %这两个for的步长可以根据运算效率适当放大

for thea=0:pi/10:2*pi;

m=rad*cos(thea);

n=rad*sin(thea);

d11=1/3*(3*r+3*m+sqrt(9*l^2-9*n^2-9*z^2));

d12=1/3*(6*r-3*m+3*n*sqrt(3)+sqrt(36*l^2-27*m^2-18*m*n*sqrt(3)-9*n^2-36*z^2));

d13=1/3*(6*r-3*m-3*n*sqrt(3)+sqrt(36*l^2-27*m^2+18*m*n*sqrt(3)-9*n^2-36*z^2));

B(i,=[m,n,z,d11,d12,d13];

a=(1/B(i,1))*[B(i,3)+r-B(i,4) 0 0;0 -0.866*B(i,2)-0.5*B(i,3)+r-B(i,5) 0;0 0 0.866*B(i,2)-0.5*B(i,3)+r-B(i,6)];

b=[B(i,1) B(i,2) B(i,3)+r-B(i,4);B(i,1) B(i,2)-0.866*r+0.866*B(i,5) B(i,3)-0.5*r+0.5*B(i,5);B(i,1) B(i,2)+0.866*r-0.866*B(i,6) B(i,3)-0.5*r+0.5*B(i,6)];

%             c=inv(a);

d=a\b;%d为雅克比矩阵

e = norm(d,'fro'); %2范数

hh(i,1)=1/e;%把这个范数记录在hh中

tezheng=hh(i,1)+tezheng;%相加对于相同l值的对应的范数

i=i+1;

end

end

tezheng1(j,=tezheng/(i-1+eps);%把不同l值对应的范数求和再除以相应的l值  存在数组tezheng1中

j=j+1;

end

Logo

汇聚原天河团队并行计算工程师、中科院计算所专家以及头部AI名企HPC专家,助力解决“卡脖子”问题

更多推荐