Команда Wolfram Mathematica Solve для нелинейной системы уравнений

#wolfram-mathematica #equation-solving

#wolfram-mathematica #решение уравнений

Вопрос:

Я пытаюсь решить нелинейную систему уравнений с помощью команды 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, оценка продолжается бесконечно, и я не могу понять, почему, в чем ошибка. Несмотря на аналогичную систему с производной от предыдущих уравнений и заменой 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 сек).

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

Комментарии:

1. @Bill , m является константой, а все остальные константы изменены, чтобы объяснить мою проблему здесь, поэтому я на самом деле не использую имена C and D . Переменные зависят в основном от значения G (я выполняю цикл, изменяя его от ~ 8×10 ^ 6 до ~ 5×10 ^ 7), поэтому ms они должны составлять от 0,8 до 0 ee , pp и nn порядка сотен (скажем, от ~ 100 до ~ 600).