各位大佬,这个Do循环有没有优化的可能
mathematica吧
全部回复
仅看楼主
level 2
Do[
kx=(k2-k1)/2*p[[i]]+(k1+k2)/2;
ky=(k2-k1)/2*p[[j]]+(k1+k2)/2;
kz=(k2-k1)/2*p[[k]]+(k1+k2)/2;
coe=int1[\[Mu],T,bx,kx,ky,kz];
sigmax=sigmax+((k2-k1)/2)^3*coe[[1]]*w[[i]]*w[[j]]*w[[k]];
sigmay=sigmay+((k2-k1)/2)^3*coe[[2]]*w[[i]]*w[[j]]*w[[k]];
sigmaz=sigmaz+((k2-k1)/2)^3*coe[[3]]*w[[i]]*w[[j]]*w[[k]],
{i,1,n},{j,1,n},{k,1,n}];
sigma1={sigmax,sigmay,sigmaz};
];
2021年06月11日 08点06分 1
吧务
level 10
有,且优化空间很大。
用赋值迭代是很慢的,多次Part也不必要且很慢。
不过如果int1是数值积分,性能瓶颈可能就在int1。
2021年06月11日 09点06分 2
int1是一个自己写的函数,不涉及积分。w和p是两个数组。大佬能不能详细知道一下,多谢了[呵呵]
2021年06月12日 05点06分
吧务
level 10
用With存储w[[{i,j,k}]]的乘积再用
不要赋值三次,而是利用乘法Listable属性和列表赋值
sigma1似乎没有被用到,那样的话它不应该放在循环体里
另一种思路是,想办法用Nest和编译函数。
2021年06月12日 07点06分 3
1