level 4
XzqQAQ
楼主
首先我定义了S函数,我想对w变量进行数值积分
S[w_, l_, m_, mi_, ma_] := {
so = NSolve[{r + 2 m*Log[r/(2 m) - 1] == mi}, r];
bd = r /. so;
sol =
NDSolve[{\[Phi]''[
s] + (w^2 - (R[s] - 2*m)/
R[s]*((l*(l + 1))/R[s]^2 + (2*m)/R[s]^3)) \[Phi][s] == 0,
R'[s] == 1 - (2*m)/R[s], \[Phi][mi] == 1, \[Phi]'[mi] == -I*w,
R[mi] == bd[[1]]}, {\[Phi], R}, {s, mi, ma}];
Pfun = \[Phi] /. sol[[1, 1]];
Rfun = R /. sol[[1, 2]];
Abs[Exp[-2*I*w*ma]*(I*w*Pfun[ma] + Pfun'[ma])/(
I*w*Pfun[ma] - Pfun'[ma])]
}
NIntegrate[S[x, 0, 1, -20, 20], {x, 0, 1}]
但是我发现NIntegrate先执行了S[x, 0, 1, -20, 20],然而x必须得先是个数,S函数才能正常出一个数。于是我就会有这样的报错:
NDSolve::ndinnt: 初始条件 (0. -1. I) x 不是一个数,也不是由数组成的矩形数组.
请问大佬们,我如何才能使用NIntegrate对我自己定义的S做数值积分?
2023年12月19日 03点12分
1
S[w_, l_, m_, mi_, ma_] := {
so = NSolve[{r + 2 m*Log[r/(2 m) - 1] == mi}, r];
bd = r /. so;
sol =
NDSolve[{\[Phi]''[
s] + (w^2 - (R[s] - 2*m)/
R[s]*((l*(l + 1))/R[s]^2 + (2*m)/R[s]^3)) \[Phi][s] == 0,
R'[s] == 1 - (2*m)/R[s], \[Phi][mi] == 1, \[Phi]'[mi] == -I*w,
R[mi] == bd[[1]]}, {\[Phi], R}, {s, mi, ma}];
Pfun = \[Phi] /. sol[[1, 1]];
Rfun = R /. sol[[1, 2]];
Abs[Exp[-2*I*w*ma]*(I*w*Pfun[ma] + Pfun'[ma])/(
I*w*Pfun[ma] - Pfun'[ma])]
}
NIntegrate[S[x, 0, 1, -20, 20], {x, 0, 1}]
但是我发现NIntegrate先执行了S[x, 0, 1, -20, 20],然而x必须得先是个数,S函数才能正常出一个数。于是我就会有这样的报错:
NDSolve::ndinnt: 初始条件 (0. -1. I) x 不是一个数,也不是由数组成的矩形数组.
请问大佬们,我如何才能使用NIntegrate对我自己定义的S做数值积分?