数値的に評価する必要がある非常に複雑な積分があります。被積分関数 (p) は 2 つの変数 (z、Lx) の関数であり、積分は Lx 上にあります。
出力でエラーが発生します。ここで問題が発生したことから、他の変数にも統合する必要があるということです(これはまさに私が避けたいことです)。
この問題を回避する方法はありますか? コードは機能するので、実行しようとすると、取得したいものが表示されます。唯一の問題は、文献と比較して結果がわずかに間違っていることです (採用したパラメーターに応じて、係数 3 または 5)。
これが私のコードです、事前に感謝します。
constants = {A -> 1.21/10^6, p1 -> 4.62, p2 -> -1.15, zc0 -> 2.49,
alpha -> 0.2, La -> 10^45.74, L0 -> 10^44.25, g1 -> 1.01,
g2 -> 2.38, \[CapitalOmega]m -> 0.3, \[CapitalOmega]l ->
0.7, \[CapitalOmega]r -> 0, h -> 0.7, c -> 300000, H0 -> 70,
Fov -> 4.476176190127657*^-7, Mpc2cm -> 3.08567758*10^24}
phizero[Lx_] := A/((Lx/L0)^g1 + (Lx/L0)^g2);
p0[L1_, L2_] := NIntegrate[ Lx*phizero[Lx] /. constants, {Lx, L1, L2}];
zc[Lx_] :=
Piecewise[{{zc0, Lx >= La}, {zc0*(Lx/La)^alpha, Lx < La}}];
e[z_, Lx_] :=
Piecewise[{{(1 + z)^p1,
z <= zc[Lx]}, {(1 + zc[Lx])^p1*((1 + z)/(1 + zc[Lx]))^p2,
z > zc[Lx]}}];
phi[z_, Lx_] := phizero[Lx]*e[z, Lx];
p[z_, L1_, L2_] :=
NIntegrate[Lx^-1 phi[z, Lx] /. constants, {Lx, L1, L2}];
(*p[3,10^44.5,10^45.5]*)
Manipulate[
LogPlot[p[z, 10^L1, 10^L2], {z, 0.1, 7}, GridLines -> Automatic,
AxesLabel -> {"z", \[Phi] [\!\(TraditionalForm\`
\*FractionBox[\(1\),
SuperscriptBox[\(Mpc\), \(3\)]]\)]} ], {L1, 42, 47}, {L2, 43, 47}]