【求助】如何减少计算时间
mathematica吧
全部回复
仅看楼主
level 3
筇殇love 楼主
求大佬翻牌,利用fold函数与sum函数求迭代,当mm=50时,计算时间要将近三个小时,可是我还需要将mm取到更大,比如说100,200,如何能减少计算时间呢?按理说用sum函数计算累加应该不费时间才对呀。代码如下:
mm = 20;
\[Rho]sb = \[Rho]s[[1, 1]];
Gsb = G[[1, 1]];
vsb = Sqrt[Gsb/\[Rho]sb];
yyy = 32/9*\[Rho]sb*vsb^2*r0^3 +
I*\[Omega]*\[Pi]/2*\[Rho]sb*vsb^2*r0^4;
\[Alpha]\[Alpha][y_,
k_] := -(Gp*
Ip*(\[Lambda]*Cos[L*\[Lambda]] +
Sum[Vmk[i, k]*B[[i]]*Cos[\[Theta][i] + L*B[[i]]], {i, mm}]) +
y*(Sin[L*\[Lambda]] +
Sum[Vmk[i, k]*Sin[\[Theta][i] + L*B[[i]]], {i, mm}]))*(Gp*
Ip*(Sum[Rmk[i, k]*B[[i]]*Cos[\[Theta][i] + L*B[[i]]], {i,
mm}] - \[Lambda]*Sin[\[Lambda]*L]) +
y*(Cos[\[Lambda]*L] +
Sum[Rmk[i, k]*Sin[\[Theta][i] + L*B[[i]]], {i, mm}]))^-1
TT[y_, k_] := -Gp*
Ip (\[Lambda]*
Sum[(\[Alpha]\[Alpha][y, k]*Rmk[i, k] + Vmk[i, k])*
Cos[\[Theta][i]]*B[[i]], {i, mm}])/(\[Alpha]\[Alpha][y, k] +
Sum[Sin[\[Theta][i]]*(\[Alpha]\[Alpha][y, k]*Rmk[i, k] +
Vmk[i, k]), {i, mm}]);
TpM = Fold[TT, yyy, {1, 2}] // AbsoluteTiming
2019年02月17日 05点02分 1
吧务
level 7
用形如这样的形式定义函数
f[x_]:=f[x]=k x+b
2019年02月18日 00点02分 2
1