登录  /  注册

python如何解方程的三种方法

爱喝马黛茶的安东尼
发布: 2019-06-14 17:14:28
原创
30613人浏览过

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

相关推荐:《python视频

python如何解方程的三种方法

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如何解方程的三种方法的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号