#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
andD
. Переменные зависят в основном от значенияG
(я выполняю цикл, изменяя его от ~ 8×10 ^ 6 до ~ 5×10 ^ 7), поэтомуms
они должны составлять от 0,8 до 0ee
,pp
иnn
порядка сотен (скажем, от ~ 100 до ~ 600).