我正在尝试使用Solve(和NSolve)命令求解非线性方程组,但是求值卡住了。
对于一个非常相似的系统,基本相同,但是使用方程的导数,我不会遇到任何问题。我定义了所需的函数,编写了方程,定义了变量,通过Solve命令定义了解决方案,然后,在与另一个系统一起获得初始值后,我尝试使用NSolve对该系统进行求解。
定义功能:
a[x_] := A (1 - ms[x])
b[x_]:=2 ((ArcSinh[nn[x]/ms[x]] ms[x]^3 + nn[x] ms[x] Sqrt[nn[x]^2 + ms[x]^2])/(8 \[Pi]^2) + (ArcSinh[pp[x]/ms[x]] ms[x]^3 + pp[x] ms[x] Sqrt[pp[x]^2 + ms[x]^2])/(8 \[Pi]^2))
其中A是一个常数。在这里,我删除了一些乘法常数以简化问题。
然后我有等式:
eq1[x_]:= B a[x] + C a[x]^2 + D a[x]^3 - F b[x]
eq2[x_]:= pp[x]^3 - nn[x]^3
eq3[x_]:= G - (pp[x]^3 + nn[x]^3)
eq4[x_]:= Sqrt[nn[x]^2 + ms[x]^2] - Sqrt[pp[x]^2 + ms[x]^2] - Sqrt[m + ee[x]^2] + H (pp[x]^3 - nn[x]^3)
其中B,C,D,G,m和H是常数。在这里,我也删除了一些乘法常数,以简化代码。
最后,我定义变量:
Var = {ee[x], pp[x], nn[x], ms[x]}
然后“隐式”解决系统问题:
Sol =
Solve[{eq1[x] == 0, eq2[x] == 0, eq3[x] == 0, eq4[x] == 0}, Var]
(注:在这里,代码被卡住了!!!!!!),正如我说过的那样,尽管在具有类似方程式导数的类似系统中,一切正常。)
并列出等式的列表:
eqs =
Table[Var[[i]] == (Var[[i]] /. Sol[[1]]), {i, Length[Var]}];
总而言之,在获得初始条件之后,我将尝试解决该系统:
system0 = Flatten[{eqs, ee[xi] == eei, pp[xi] == ppi, nn[xi] == nni, ms[xi] == msi}];
sol0 = NSolve[system0, {ee, kpp, nn, ms}, {x, xi, xf}, Flatten[{MaxSteps -> 10^4, MaxStepFraction -> 10^-2, WorkingPrecision -> 30, InterpolationOrder -> All}, 1]];
我之前将xi = 10 ^ -8和xf = 10设置为
尝试更清楚一点,当我尝试通过Solve命令评估系统时,评估将无限期地继续,并且我无法理解为什么会出错。尽管使用了先前方程式的导数的类似系统,并且用NDSolve替换了NSolve,但工作正常,并且执行了“等效”行(Sol = Solve [{eq1 [x] == 0,eq2 [x] = = 0,eq3 [x] == 0,eq4 [x] == 0},Core])的速度非常快(〜1秒)。
欢迎您帮助我理解我在哪里错了,以及提出任何以数值方式解决这类方程组的建议。
尝试更清楚一点,当我尝试通过Solve命令评估系统时,评估将无限期地继续,并且我无法理解为什么会出错。尽管使用了先前方程式的导数的类似系统,并且用NDSolve替换了NSolve,但工作正常,并且执行了“等效”行(Sol = Solve [{eq1 [x] == 0,eq2 [x] = = 0,eq3 [x] == 0,eq4 [x] == 0},Core])的速度非常快(〜1秒)。
欢迎您帮助我理解我在哪里错了,以及提出任何以数值方式解决这类方程组的建议。