【请指点】数值计算重积分总是报错(两个明确积分限、一个变限)
mathematica吧
全部回复
仅看楼主
level 8
微分方程 楼主
具体代码放在了楼下
2023年03月05日 07点03分 1
level 8
微分方程 楼主
数学符号变成了代码:
[CapitalTheta] = m^2 X Cos[ [Sigma]]^2 Cot[ [Theta]]^2;
R[ [Epsilon]_, [Sigma]_, F_] := ( [Epsilon]^2 - 1) r^4 +
2 M r^3 + (a^2 ( [Epsilon]^2 - 1) - X Sin[ [Sigma]]^2 - F) r^2 +
2 M (F + (Sqrt[X] Sin[ [Sigma]] - a [Epsilon])^2) r - a^2 F;
2023年03月05日 07点03分 2
level 8
微分方程 楼主
para0 = {a -> 0.5, M -> 1, [Theta] -> [Pi]/3};
R1 = R[ [Epsilon], [Sigma], F] /. para0;
DR1 = D[R1, r];
trpl = 2 (M + Sqrt[M^2 - a^2]) /. para0
para = {a -> 0.5, M -> 1, [Beta] -> 1,
r -> trpl, [Theta] -> [Pi]/3}
2023年03月05日 07点03分 3
level 8
微分方程 楼主
[Sigma]m = 0; [Sigma]M = 2 [Pi];
[Epsilon]m = 1; [Epsilon]M = 100;
Fm = 0.01;
Fc[ [Epsilon]_, [Sigma]_] := (-377.54 + 585.47 [Epsilon]^2 +
2.61 Sin[ [Sigma]]^2 - 2.61 [Epsilon]^2 Sin[ [Sigma]]^2)/(
13.68 + 41.78 Sin[ [Sigma]]^2);
2023年03月05日 07点03分 4
level 8
微分方程 楼主
n = 100;
core[ [Epsilon]_, [Sigma]_,
F_] := ( [Epsilon] Exp[- [Beta] [Epsilon]])/(
2 Sqrt[R[ [Epsilon], [Sigma], F]] Cos[ [Theta]]) /. para;
core1[ [Epsilon]_, [Sigma]_] :=
NIntegrate[
core[ [Epsilon], [Sigma], F], {F, Fm,
Fc[ [Epsilon], [Sigma]]}] /. para;
core1data =
Flatten[Table[{{ [Epsilon], [Sigma]},
core1[ [Epsilon], [Sigma]]}, { [Epsilon], [Epsilon]m,
[Epsilon]M, ( [Epsilon]M - [Epsilon]m)/
n}, { [Sigma], [Sigma]m, [Sigma]M, ( [Sigma]M - [Sigma]m)/
n}], 1];
corefunc = Interpolation@core1data;
NIntegrate[
corefunc[ [Epsilon], [Sigma]], { [Epsilon], [Epsilon]m,
[Epsilon]M}, { [Sigma], [Sigma]m, [Sigma]M}]
2023年03月05日 07点03分 5
level 8
微分方程 楼主
请大佬指点报错部分如何修正处理。
将报错点邻域挖去后会出现新的报错点。
2023年03月05日 07点03分 6
level 1
对5楼有点好奇,为什么不写成:
n = 100;
Epsilon_m = 0.1; Epsilon_M = 1.0; Sigma_m = 0.1; Sigma_M = 1.0;
para = {Beta -> 1, Theta -> Pi/4, R -> Function[{Epsilon, Sigma, F}, Epsilon + Sigma + F]};
core[Epsilon_, Sigma_, F_] := (Epsilon Exp[-Beta Epsilon])/(2 Sqrt[R[Epsilon, Sigma, F]] Cos[Theta]) /. para;
core1[Epsilon_, Sigma_] := NIntegrate[core[Epsilon, Sigma, F], {F, Fm, Fc[Epsilon, Sigma]}] /. para;
core1data = Flatten[Table[{Epsilon, Sigma, core1[Epsilon, Sigma]},
{Epsilon, Epsilon_m, Epsilon_M, (Epsilon_M - Epsilon_m)/n},
{Sigma, Sigma_m, Sigma_M, (Sigma_M - Sigma_m)/n}], 1];
corefunc = Interpolation[core1data];
NIntegrate[corefunc[Epsilon, Sigma], {Epsilon, Epsilon_m, Epsilon_M}, {Sigma, Sigma_m, Sigma_M}]
2025年01月31日 08点01分 7
你这也是错的,下划线_在Mathematica里是内置函数Blank的简写,不能用于变量命名。
2025年02月01日 04点02分
@xzcyr 谢谢指正
2025年02月01日 16点02分
吧务
level 15
……特殊字符前面的 \ 呢?百度贴吧又出bug了还是你自己去掉了?如果是后者,你这样反而把
正确的
代码弄得没法执行了,那个 \ 是代码的一部分,不信你把 \[Theta] 贴回软件试下。
2025年02月01日 04点02分 8
吧务
level 15
然后,你看到的东西不叫“报错”,叫警告信息,它只是提示出错的
可能性。遇到警告时请不要六神无主,请冷静地阅读它到底写了什么。考虑到警告信息里给的误差估计不是很大,你遇到的警告很可能是良性的。(当然这个还是要结合问题的物理背景去判断。)如果NIntegrate计算出的结果精度尚可接受,那么不妨直接无视警告。(嫌烦的话就直接用Off或者Quiet关掉。)
2025年02月01日 04点02分 9
1