python如何解方程式的三種方法

爱喝马黛茶的安东尼
發布: 2019-06-14 18:09:10
原創
32048 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!