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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值