国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Python中如何解方程[HTML代碼]

2019-11-14 11:58:33
字體:
來源:轉載
供稿:網友
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 求解非線性方程組  先看官方文檔的介紹:  scipy.optimize.fsolve(func, x0, args=(), fprime=None, full_output=0, col_deriv=0, xtol=1.49012e-08, maxfev=0, band=None, epsfcn=None, factor=100, diag=None)[source]  一般來說,我們只需要用到 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]  另外,Wayne Shi 的這篇 使用 Python 解數學方程?,就重點講述了 SymPy 解線性方程組的方法,所以我也就不再贅述了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安远县| 伊金霍洛旗| 万山特区| 贡嘎县| 宁强县| 贵阳市| 闽侯县| 化州市| 荔波县| 鸡泽县| 佛坪县| 无锡市| 霸州市| 临洮县| 青川县| 建宁县| 邢台县| 珲春市| 阜康市| 化州市| 泸西县| 张家口市| 米林县| 余江县| 砚山县| 阿拉善右旗| 磐石市| 蒲江县| 松溪县| 金溪县| 隆化县| 喀什市| 那曲县| 常山县| 平阴县| 中西区| 敦煌市| 威海市| 师宗县| 广宁县| 桂平市|