Как правильно решить систему нелинейных уравнений с Fsolve в Python - PullRequest
1 голос
/ 29 апреля 2019

Я пытаюсь решить систему нелинейных уравнений.

Для этого я успешно использовал sympy online для решения системы из трех уравнений. Но это больше не работает с 7 уравнениями, возвращая мне сообщение «Время операции истекло». Итак, я пытаюсь использовать стандартный fsolve для решения проблемы. Но в то время как у меня есть хорошие результаты с простыми наборами из 3 уравнений, fsolve дает мне плохие результаты.

Это код, который я написал (благодаря тому, что я нашел на этом форуме):

def equations(p):
    w1, w2, m = p
    f0 = w1+w2-1
    f1 = w1*m+w2*(1-2*m)-1/3
    f2 = w1*m**2+w2*(1-2*m)**2-1/5
    return (f0,f1,f2)

w1, w2, m = fsolve(equations, (0,0,0))
print equations((w1,w2,m))

В свою очередь, это дает мне (отрицательный ...) результат:

(0.0, -1.2378986724570495e-13, 5.1419979385514125e-13)

Для сравнения, Симпи дал мне ожидаемые результаты. Это дало примерно:

(0.333333, 0.666667, 0,122515)

У вас есть идеи, почему fsolve не работает в моем случае?

Заранее спасибо.

1 Ответ

4 голосов
/ 29 апреля 2019

При print equations((w1,w2,m)) вы печатаете значения (f0, f1, f2) в точке (w1, w2, m). Вместо этого sympy возвращает значение (w1, w2, m).

Следовательно, если я заменю оператор print на print (w1,w2,m), я получу (0.6666666666319606, 0.33333333336803944, 0.12251482264361727).

Ответ другой, потому что уравнения нелинейные и могут иметь несколько нулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...