Я задал этот вопрос Хорошо ли fsolve для какой-либо системы уравнений? , из которой я получил удовлетворительный ответ. Система, которую я там представил
x = A * exp (x + y)
y = 4 * exp (x + y)
, это просто игрушечная модель, которая похожа на мою реальную проблему, fsolve
справилась (код в ответе ниже):
from scipy.optimize import fsolve
import matplotlib.pyplot as plt
import numpy as np
def f(p,*args):
x, y = p
A = args[0]
return (x -A* np.exp(x+y),y- 4* np.exp(x+y))
A = np.linspace(0,4,5)
X = []
Y =[]
for a in A:
x,y = fsolve(f,(0.0, 0.0) , args=(a))
X.append(x)
Y.append(y)
print(x,y)
plt.plot(A,X)
plt.plot(A,Y)
Однако я читаю здесь stackoverflow.com/questions/6519380/… что brenqt
намного быстрее, чем fsolve
. Я пытался использовать его, но продолжаю получать f(a) and f(b) must have different signs
. Я понимаю, что f must be continuous. f(a) and f(b) must have opposite signs.
Итак, я считаю, brenqt
не является хорошим выбором для этой системы. Пожалуйста, поправьте меня, если я ошибаюсь.
В моем реальном случае я сталкиваюсь именно с тем, что ответ здесь Как решить 3 нелинейных уравнения в Python , т. Е. "Fsolve ()) довольно чувствителен к начальным условиям", которых я хочу избежать «во-первых, минимизируйте сумму квадратов», поскольку у меня гораздо больше параметров, чем у ОП этого вопроса. Как использовать optimize.root
для получения результата, аналогичного тому, который я получил с fsolve
в моем исходном вопросе?