Команда Wolfram Mathematica Solve для нелинейной системы уравнений - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь решить нелинейную систему уравнений с помощью команды 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]

(N.B: именно здесь код застревает !!!! Несмотря на, как я уже сказал, с аналогичной системой с производными уравнений, все работает нормально.)

и составьте список уравнений:

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, оценка продолжается бесконечно, и я не могу понять, почему, где ошибка. Несмотря на аналогичную систему с производной предыдущих уравнений и заменой NSolve на NDSolve, работает без проблем и выполнение «эквивалентной» строки (Sol = Solve [{eq1 [x] == 0, eq2 [x] = = 0, eq3 [x] == 0, eq4 [x] == 0}, Core]) очень быстро (~ 1 сек).

Любая помощь, чтобы понять, где я ошибаюсь, приветствуется, также как и любое предложение для численного решения этой системы уравнений.

Пытаясь быть более понятным, когда я пытаюсь оценить систему с помощью команды Solve, оценка продолжается бесконечно, и я не могу понять, почему, где ошибка. Несмотря на аналогичную систему с производной предыдущих уравнений и заменой NSolve на NDSolve, работает без проблем и выполнение «эквивалентной» строки (Sol = Solve [{eq1 [x] == 0, eq2 [x] = = 0, eq3 [x] == 0, eq4 [x] == 0}, Core]) очень быстро (~ 1 сек).

Любая помощь, чтобы понять, где я ошибаюсь, приветствуется, также как и любое предложение для численного решения такого рода системы уравнений.

...