python怎么算二元一次方程_python如何解方程的三种方法

python求解方程组的三种方法:

相关推荐:《python视频》

5d03656206c37157.jpg

Numpy求解方程组x + 2y = 3

4x + 5y = 6

当然我们可以手动写出解析解,然后写一个函数来求解,这实际上只是用 Python 来单纯做“数值计算”. 但实际上,numpy.linalg.solve 可以直接求解线性方程组.

一般地,我们设解线性方程组形如 Ax=b,其中 A 是系数矩阵,b 是一维(n 维也可以,这个下面会提到),x 是未知变量. 再拿上面地最简单的二元一次方程组为例,我们用 numpy.linalg.solve 可以这样写:In [1]: import numpy as np

...: A = np.mat('1,2; 4,5') # 构造系数矩阵 A

...: b = np.mat('3,6').T # 构造转置矩阵 b (这里必须为列向量)

...: r = np.linalg.solve(A,b) # 调用 solve 函数求解

...: print r

...:

Out[1]: [[-1.]

[ 2.]]

那么前面提到的“ n 维”情形是什么呢?实际上就是同时求解多组形式相同的二元一次方程组,例如我们想同时求解这样两组:x + 2y = 3

4x + 5y = 6

和x + 2y = 7

4x + 5y = 8

就可以这样写:In [2]: import numpy as np

...: A = np.mat('1,2; 4,5') # 构造系数矩阵 A

...: b = np.array([[3,6], [7,8]]).T # 构造转置矩阵 b (这里必须为列向量),

...: 注意这里用的是 array

...: r = np.linalg.solve(A,b) # 调用 solve 函数求解

...: print r

...:

Out[2]: [[-1. -6.33333333]

[ 2. 6.66666667]]

SciPy 求解非线性方程组

一般来说,我们只需要用到 func 和 x0 就够了. func 是自己构造的函数,也就是需要求解的方程组的左端(右端为 0),而 x0 则是给定的初值.

我们来看一个具体的例子,求解:x + 2y + 3z - 6 = 0

5 * (x ** 2) + 6 * (y ** 2) + 7 * (z ** 2) - 18 = 0

9 * (x ** 3) + 10 * (y ** 3) + 11 * (z ** 3) - 30 = 0

就可以这么写:In [3]: from scipy.optimize import fsolve

...:

...: def func(i):

...: x, y, z = i[0], i[1], i[2]

...: return [

...: x + 2 * y + 3 * z - 6,

...: 5 * (x ** 2) + 6 * (y ** 2) + 7 * (z ** 2) - 18,

...: 9 * (x ** 3) + 10 * (y ** 3) + 11 * (z ** 3) - 30

...: ]

...:

...: r = fsolve(func,[0, 0, 0])

...: print r

...:

Out[3]: [ 1.00000001 0.99999998 1.00000001]

当然,SciPy 也可以用来求解线性方程组,这是因为 scipy.optimize.fsolve 本质上是最小二乘法来逼近真实结果.

SymPy 求解方程组

例如求解一个:x + 2 * (x ** 2) + 3 * (x ** 3) - 6 = 0

直接就是:In [4]: from sympy import *

...: x = symbols('x')

...: solve(x + 2 * (x ** 2) + 3 * (x ** 3) - 6, x)

Out[4]: [1, -5/6 - sqrt(47)*I/6, -5/6 + sqrt(47)*I/6]

以上就是python如何解方程的三种方法的详细内容,更多请关注Gxl网其它相关文章!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值