文章目录
- 求解线性方程
- 求解非线性方程
求解线性方程
对于固定的线性方程:
a + 2b = 0
4a - 5b = 0
求:a 与 b
使用如下方法:
import scipy.optimize as opt
import numpy as np
def func(x: np.ndarray):
a, b = x # 这里x就是传入fsolve的x0
return np.array([
a + 2 * b, # 式1:a + 2b = 0
a * 4 - 5 + b, # 式2:4a - 5b = 0
])
result = opt.fsolve(func, x0=np.array([1, 1]))
print("方程的解:", result)
print("各向量的值(代入结果后每个式子的值):", func(result))
最后的func(result)
通常会认为小于 1e-6,就是一个正确的方程的解
求解非线性方程
对于非线性方程:
( a + b ) 2 = 0 (a+b)^2=0 (a+b)2=0 与 a − 1 = 0 a-1=0 a−1=0
我们可以手算出a与b的解分别为 a=1 b=9,或 a=1 b=-11
求解方法如下:
import scipy.optimize as opt
import numpy as np
def func(x: np.ndarray):
a, b = x
return np.array([
(a + b) ** 2 - 100,
a - 1,
])
result1 = opt.fsolve(func, x0=np.array([0, 10]))
result2 = opt.fsolve(func, x0=np.array([0, -10]))
print("方程的解1:", result1)
print("各向量的值(代入结果后每个式子的值):", func(result1))
print("方程的解2:", result2)
print("各向量的值(代入结果后每个式子的值):", func(result2))
得到结果:
方程的解1: [1. 9.]
各向量的值(代入结果后每个式子的值): [0. 0.]
方程的解2: [ 1. -11.]
各向量的值(代入结果后每个式子的值): [0. 0.]
当可以得到精确解时,使用任何初始值都OK,但是如果有多个解,会根据初始值,返回与初始结果最接近的一个结果