为什么这个数值积分无法给出结果
mathematica吧
全部回复
仅看楼主
level 1
a来自北方 楼主
M = 10^(-3); \[Epsilon] = 10^(-5); gy = 0.35;
g = N[Sqrt[(4 Pi)/30], 3]; e = N[Sqrt[(4 Pi)/129], 3]; f := - gy; sw =
Sqrt[0.23]; cw = Sqrt[1 - 0.23];
Mb[j_] := Mblist[[j]];
gb[j_] := gblist[[j]];
Mblist = {0, 93};
gblist = {e, g};
(*f={e,\[Mu],\[Tau],\[Nu],\[Nu],\[Nu],u,c,t,d,s,b},1~3E,4~6\[Nu],7~9U,\
10~12D*)
mf[i_] := mflist[[i]];
Qf[i_] := Qflist[[i]];
Subscript[Qfb, 1][i_] := Qfblist1[[i]];
Subscript[Qfb, 2][i_] := Qfblist2[[i]];
mflist = {511 10^-6, 106 10^-3, 1.8, 0, 0, 0, 2.3 10^-3, 1.3, 173,
4.8 10^-3, 95 10^-3, 4.2};
Qflist = {1, 1, 1, 2/3, 2/3, 2/3, 1/3, 1/3, 1/3};
Qfblist1 = {-1, -1, -1, 2/3, 2/3, 2/3, -(1/3), -(1/3), -(1/3)};
t[s_, p_, i_, j_] :=
1/2 (M^2 + Mb[j]^2 - s) +
2 p Sqrt[(s/4 - mf[i]^2) ((1/2 (Sqrt[s] + M^2/Sqrt[s]))^2 - M^2)];
u[s_, p_, i_, j_] :=
1/2 (M^2 + Mb[j]^2 - s) -
2 p Sqrt[(s/4 - mf[i]^2) ((1/2 (Sqrt[s] + M^2/Sqrt[s]))^2 - M^2)];
F1[s_, i_, j_] := (Qf[i] f Subscript[Qfb, j][i] gb[j])^2/(32 Pi s)
Sqrt[((s - (M + Mb[j])^2) (s - (M - Mb[j])^2))/(
s (s - 4 mf[i]^2))] ;
A[s_, p_, i_,
j_] := (-2 (2 mf[i]^2 + Mb[j]^2) (2 mf[i]^2 + M^2) (1/
t[s, p, i, j]^2 + 1/u[s, p, i, j]^2) +
2 (t[s, p, i, j]/u[s, p, i, j] + u[s, p, i, j]/t[s, p, i, j]) -
4 (1/u[s, p, i, j] + 1/t[s, p, i, j]) (2 mf[i]^2 + M^2 +
Mb[j]^2) -
4/(u[s, p, i, j] t[s, p, i, j]) (2 mf[i]^2 + M^2 +
Mb[j]^2) (2 mf[i]^2 - M^2 - Mb[j]^2)) ;
d[i_, j_] := Max[M + Mb[j], 2 *mf[i]];
G[t_] := NIntegrate[
F1[s, 1, 1] A[s, p, 1, 1] (s - d[1, 1]^2) s^(1/2)
t^3 BesselK[1, s^(1/2) t/M], {p, -1, 1}, {s, 4 mf[1]^2,
Infinity}, WorkingPrecision -> 16, MinRecursion -> 5,
MaxRecursion -> 1000, AccuracyGoal -> Infinity,
Method -> {Automatic, "SymbolicProcessing" -> 0}];
F[x_] := NIntegrate[G[t], {t, 0, x}, WorkingPrecision -> 16,
MinRecursion -> 5, MaxRecursion -> 1000, AccuracyGoal -> Infinity,
Method -> {Automatic, "SymbolicProcessing" -> 0}];
结果如图
2022年02月18日 07点02分 1
吧务
level 10
s没有值
2022年02月18日 08点02分 2
如果没有值,为何G[t]可以正常输出。。
2022年02月18日 08点02分
@a来自北方 因为G的定义里有值{s, 4 mf[1]^2, Infinity}
2022年02月18日 11点02分
@asdasd1dsadsa 试了一下去掉了G的定义,直接把F[x_]定义成一个 NIntegrate,积分域是{t,0,x},{p,-1,1},{s,d[1,1]^2,Infinity}还是会报非数值。。
2022年02月18日 11点02分
@a来自北方 贴代码
2022年02月19日 07点02分
level 1
a来自北方 楼主
F[x_] := NIntegrate[
F1[s, 1, 1] A[s, p, 1, 1] (s - d[1, 1]^2) s^(1/2) t^3 BesselK[1,
s^(1/2) t/M], {t, 0, x}, {p, -1, 1}, {s, 4 mf[1]^2, Infinity},
WorkingPrecision -> 16, MinRecursion -> 5, MaxRecursion -> 1000,
AccuracyGoal -> Infinity,
Method -> {Automatic, "SymbolicProcessing" -> 0}];
其余不变
最后输出结果为
@ asdasd1dsadsa
2022年02月19日 09点02分 4
t既是函数头,又是积分变量,导致计算中的t[s,p,i,j]被计算为someNumber[s,p,i,j]而得不到一个数值
2022年02月19日 12点02分
当然,解决了这个问题你也未必能得到满意的结果。剩下的问题那就复杂得多了。
2022年02月19日 12点02分
@asdasd1dsadsa 我尝试了下,给定t积分的上界,这个数值积分也是做不出的。
2022年02月19日 14点02分
@a来自北方 NIntegrate[ F1[s, 1, 1] A[s, p, 1, 1] (s - d[1, 1]^2) s^(1/2) t^3 BesselK[1, s^(1/2) t/M], {t, 0, 100}, {p, -1, 1}, {s, 4 mf[1]^2, Infinity}]就这个结果也无法给出。不过通过去掉关于t的积分定义的G[t_]可以正常输出。
2022年02月19日 14点02分
吧务
level 10
这个问题比较复杂,我已经定位到了,待会跟你解释。
2022年02月19日 12点02分 5
谢谢[笑眼]
2022年02月20日 03点02分
吧务
level 10
你是不是会错意了。
我的意思是,你的错误相当于:
u[x_] := 1
v[x_] := u[x]
Integrate[v[x]*u, {u, 0, 1}, {x, 0, 1}]
2022年02月19日 18点02分 6
嗷嗷,谢谢
2022年02月20日 04点02分
1