我第一次使用fsolve
来求解非线性方程。作为测试,我已经知道结果应该是什么。我正在使用下面的代码来获取x和y的值。这是前两个formulas
此代码适用于此代码,当我使用x, y = fsolve(equations, (0,0))
时,但是如果将起始值更改为x, y = fsolve(equations, (1,1))
,则结果不正确。结果应为0.366, 0.266
。因此起始值1, 1
并非完全不正确。如果我事先不知道所需的结果,我怎么知道必须使用(0,0)
?由于我的启动参数可能会更改,因此我需要一个稳定的解决方案。
import numpy as np
from scipy.optimize import fsolve
import math
a = 0.356
b = 0.259
k1 = -0.17
k2 = 0.30
k3 = -0.47
def equations(p):
x, y = p
return ((x*(1+k1*(np.sqrt(x**2+y**2))**2+k2*(np.sqrt(x**2+y**2))**4+k3*(np.sqrt(x**2+y**2))**6))-a,(y*(1+k1*(np.sqrt(x**2+y**2))**2+k2*(np.sqrt(x**2+y**2))**4+k3*(np.sqrt(x**2+y**2))**6)-b))
x, y = fsolve(equations, (0,0))
print("x =", x)
print("y =", y)