python使用scipy.optimize的fsolve求解线性(非线性)方程

文章目录

  • 求解线性方程
  • 求解非线性方程

求解线性方程

对于固定的线性方程:

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 a1=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,但是如果有多个解,会根据初始值,返回与初始结果最接近的一个结果

你可能感兴趣的:(python,自动化办公,python,scipy,numpy)