這是否有用?我的意思是它給出了預期的結果?通過將被積函數作爲運算符(黑盒)提供,evalf/Int引擎不會被過分昂貴地戳穿。這可以節省時間,儘管存在風險,因爲它可能會遺漏某些問題的關鍵不連續點。
> U:=subs(subs([n=3, p=1.2451, z=exp(x*I)/2],
> subs(s=(p/2)*(1+1/(4*z)^n),
> subs(t=s+sqrt(s^2-1/(4*z)^n),
> w=z*t^(2/n)))),
> Int(X->eval(abs(w)^2,x=X), 0..2*Pi)/(2*Pi)):
> st:=time():
> evalf(U);
0.3351666815
> time()-st;
0.109
另一個(可能更少通常是有用的可能性)可能是,
> restart:
> U:=subs(subs([n=3, p=1.2451, z=exp(x*I)/2],
> subs(s=(p/2)*(1+1/(4*z)^n),
> subs(t=s+sqrt(s^2-1/(4*z)^n),
> w=z*t^(2/n)))),
> Int(abs(w)^2, x=0..2*Pi)/(2*Pi)):
> st:=time():
> simplify(U);
-20
0.3351666815 - 0.5131390209 10 I
> time()-st;
3.150
謝謝你,你的第一個建議的工作。第二個結果給出了一個不正確的結果,因爲積極函數的積分應該是積極的。 – Grandfather 2013-02-28 00:02:45
第二個結果與第一個結果具有相同的實部。不同之處在於由於數值舍入而產生的可忽略的假想僞像,可以使用'fnormal'命令明顯地將其刪除。但我更多的是好奇心 - 第一種方式更好,而不僅僅是速度。 – acer 2013-02-28 00:28:30