1

I am trying to solve a nonlinear system of equations by using the Solve (and NSolve) command, but the evaluation get stuck.

For a very similar system, basically the same but with the derivatives of the equations I get no problems. I define the functions I need, write the equations, define the variables, define the solutions through the Solve command, and, once obtained with another system the initial values, I try to solve the system with NSolve.

Defining the functions:

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))

where A is a constant. Here I deleted some multiplicative constants to simplify the problem.

Then I have the equations:

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)

where B, C, D, G, m and H are constants. Here too, I deleted some multiplicative constants, to simplify the code for you.

Finally, I define the variables:

Var = {ee[x], pp[x], nn[x], ms[x]}

then solve the system "implicitly":

Sol = 
 Solve[{eq1[x] == 0, eq2[x] == 0, eq3[x] == 0, eq4[x] == 0}, Var]

(N.B: it is here that the code get stuck!!!! Despite, as I said, with a similar system with derivatives of the equations, everything work fine.)

and make a list of the equations:

eqs = 
  Table[Var[[i]] == (Var[[i]] /. Sol[[1]]), {i, Length[Var]}];

To conclude, after having obtained the initial conditions, I would try to solve the system:

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]];

where I previously set xi = 10^-8 and xf = 10.

Trying to be more clear, when I try to evaluate the system through the Solve command, the evaluation continues indefinitely and I cannot understand why, where is the mistake. Despite a similar system with the derivative of the previous equations and NSolve replaced with NDSolve, works without any problem, and the execution of the "equivalent" line (Sol = Solve[{eq1[x] == 0, eq2[x] == 0, eq3[x] == 0, eq4[x] == 0}, Core]) is extremely fast (~1 sec).

Any help to understand where I am wrong is welcome, as well any suggestion to solve numerically this kind of system of equations.

Trying to be more clear, when I try to evaluate the system through the Solve command, the evaluation continues indefinitely and I cannot understand why, where is the mistake. Despite a similar system with the derivative of the previous equations and NSolve replaced with NDSolve, works without any problem, and the execution of the "equivalent" line (Sol = Solve[{eq1[x] == 0, eq2[x] == 0, eq3[x] == 0, eq4[x] == 0}, Core]) is extremely fast (~1 sec).

Any help to understand where I am wrong is welcome, as well any suggestion to solve numerically this kind of system of equations.

Riccardo
  • 21
  • 4
  • @Bill , `m` is a constant, and all the other constant are modified to explain my problem here, so I am not really using the `C` and `D` names. The variables depend basically from the value of `G` (I am doing a loop varying it from ~8x10^6 to ~5x10^7), so,`ms` should span from 0.8 towards 0, `ee`, `pp` and `nn` of the order of hundreds (let say from ~100 to ~ 600). – Riccardo Apr 18 '19 at 15:57

0 Answers0