杂积分
mathematica吧
全部回复
仅看楼主
level 5
dayday14 楼主
eB = 125;
\[CapitalLambda] = 500;
\[CapitalOmega]1[b_,
T_] := -1/Sqrt[\[Pi]]*(3*eB)/(2*\[Pi])^2*
NIntegrate[
1/Sqrt[s]*(Exp[-s (k + b)^2]*(k + b) +
Exp[-s (-k + b)^2]*(-k + b)), {k, 0, 500}, {s,
1/\[CapitalLambda]^2, 500}] -
2/Sqrt[\[Pi]]*eB/(2*\[Pi])^2*
NIntegrate[
Sum[1/Sqrt[
s]*(Exp[-s ((k + b)^2 + 2/3*eB*l)]*(k + b) +
Exp[-s ((-k + b)^2 + 2/3*eB*l)]*(-k + b)), {l, 1, 100,
1}], {k, 0, 500}, {s, 1/\[CapitalLambda]^2, 500}] -
2/Sqrt[\[Pi]]*(2*eB)/(2*\[Pi])^2*
NIntegrate[
Sum[1/Sqrt[
s]*(Exp[-s ((k + b)^2 + 4/3*eB*l)]*(k + b) +
Exp[-s ((-k + b)^2 + 4/3*eB*l)]*(-k + b)), {l, 1, 100,
1}], {k, 0, 500}, {s, 1/\[CapitalLambda]^2, 500}]
这样一个复杂的积分,计算\[CapitalOmega]1[20, 100]时
当直接这样积的时候,会出现很多的报错,结果为0;
如果在每一个积分里加上WorkingPrecision -> 9, MinRecursion -> 4, MaxRecursion -> 10,报错就会消失,但是结果就是-25504。
真的差好多,到底那个结果更可靠呢?要怎么判断呀?
2018年10月03日 12点10分 1
吧务
level 15
……你这个积分是有符号解的,并且计算速度还不算太慢。重点是把Sum里的通项拿出来积,积完再求和。再就是要把s和k的积分顺序换一下,也就是说,要换成, {s, 1/\[CapitalLambda]^2, 500}, {k, 0, 500}。最后算出来的结果是11444.2。
2018年10月06日 07点10分 3
这样的话我试了一下,算一个数要用40多分钟,我要找等于0的点,要算很多的值,这样的话根本实现不了呀[汗],有没有优化的办法呀?
2018年10月06日 11点10分
@dayday14 ……哪那么慢啊,你算出一个通项的符号积分之后再直接用Total和Table求和啊,不要反复重算。
2018年10月06日 11点10分
@dayday14 刚试了一下,b不赋数值值Integrate照样可以在半分钟内算完一个积分。这样更快了。
2018年10月06日 11点10分
@xzcyr 是把里面的积分再定义成函数吗?
2018年10月06日 12点10分
level 5
dayday14 楼主
eB = 125;
\[CapitalLambda] = 500;
a1[b_] :=
Integrate[
1/Sqrt[s]*(Exp[-s (k + b)^2]*(k + b) +
Exp[-s (-k + b)^2]*(-k + b)), {s, 1/\[CapitalLambda]^2, 500}, {k,
0, 500}]
a2[b_, l_] :=
Integrate[
1/Sqrt[s]*(Exp[-s ((k + b)^2 + 2/3*eB*l)]*(k + b) +
Exp[-s ((-k + b)^2 + 2/3*eB*l)]*(-k + b)), {s,
1/\[CapitalLambda]^2, 500}, {k, 0, 500}]
a3[b_, l_] :=
Integrate[
1/Sqrt[s]*(Exp[-s ((k + b)^2 + 4/3*eB*l)]*(k + b) +
Exp[-s ((-k + b)^2 + 4/3*eB*l)]*(-k + b)), {s,
1/\[CapitalLambda]^2, 500}, {k, 0, 500}]
\[CapitalOmega]1[b_, T_] := -1/Sqrt[\[Pi]]*(3*eB)/(2*\[Pi])^2*a1[b] -
2/Sqrt[\[Pi]]*eB/(2*\[Pi])^2*Total@Table[a2[b, l], {l, 1, 100}] -
2/Sqrt[\[Pi]]*(2*eB)/(2*\[Pi])^2*Total@Table[a3[b, l], {l, 1, 100}]
谢谢了!!!
2018年10月06日 12点10分 4
(扶额)果然是这样。把前三个:=给改成=。然后,来把这篇文章读了:https://tieba.baidu.com/p/4886024974
2018年10月06日 12点10分
@xzcyr 好的,谢谢了!
2018年10月06日 12点10分
要是觉得上面那篇太难了,就先把自带帮助里的《立即定义和延时定义》(tutorial/ImmediateAndDelayedDefinitions)教程给读了。最后再强调一遍,不要盲目地只使用Set或SetDelayed定义函数,要具体场景具体分析!
2018年10月06日 12点10分
@xzcyr 好的,会好好看的
2018年10月06日 13点10分
1