scipy求解非线性方程组
scipy.optimize.root 函数参数不太明白,找到目录下说明示例,可得二元非线性方程组解法。
Examples
--------
The following functions define a system of nonlinear equations and its
jacobian.
>>> def fun(x):
... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0,
... 0.5 * (x[1] - x[0])**3 + x[1]]
>>> def jac(x):
... return np.array([[1 + 1.5 * (x[0] - x[1])**2,
... -1.5 * (x[0] - x[1])**2],
... [-1.5 * (x[1] - x[0])**2,
... 1 + 1.5 * (x[1] - x[0])**2]])
A solution can be obtained as follows.
>>> from scipy import optimize
>>> sol = optimize.root(fun, [0, 0], jac=jac, method='hybr')
>>> sol.x
array([ 0.8411639, 0.1588361])
"""
import numpy as np
#解非线性方程组
def fun(x):
return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0, 0.5 * (x[1] - x[0])**3 + x[1]]
def jac(x):
return np.array([[1 + 1.5 * (x[0] - x[1])**2, -1.5 * (x[0] - x[1])**2],[-1.5 * (x[1] - x[0])**2,1 + 1.5 * (x[1] - x[0])**2]])
from scipy import optimize
sol1 = optimize.root(fun, [0, 0], jac=jac, method='hybr')
sol2 = optimize.root(fun, [0, 0], jac=None, method='hybr')
print(sol1.x)
print(sol2.x)
[ 0.8411639 0.1588361]
[ 0.8411639 0.1588361]