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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

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

2019-11-14 11:54:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Numpy 求解線(xiàn)性方程組  例如我們要解一個(gè)這樣的二元一次方程組:  x + 2y = 3  4x + 5y = 6  當(dāng)然我們可以手動(dòng)寫(xiě)出解析解,然后寫(xiě)一個(gè)函數(shù)來(lái)求解,這實(shí)際上只是用 Python 來(lái)單純做“數(shù)值計(jì)算”. 但實(shí)際上,numpy.linalg.solve 可以直接求解線(xiàn)性方程組.  一般地,我們?cè)O(shè)解線(xiàn)性方程組形如 Ax=b,其中 A 是系數(shù)矩陣,b 是一維(n 維也可以,這個(gè)下面會(huì)提到),x 是未知變量. 再拿上面地最簡(jiǎn)單的二元一次方程組為例,我們用 numpy.linalg.solve 可以這樣寫(xiě):  In [1]: import numpy as np  ...: A = np.mat('1,2; 4,5') # 構(gòu)造系數(shù)矩陣 A  ...: b = np.mat('3,6').T # 構(gòu)造轉(zhuǎn)置矩陣 b (這里必須為列向量)  ...: r = np.linalg.solve(A,b) # 調(diào)用 solve 函數(shù)求解  ...: PRint r  ...:  Out[1]: [[-1.]  [ 2.]]  那么前面提到的“ n 維”情形是什么呢?實(shí)際上就是同時(shí)求解多組形式相同的二元一次方程組,例如我們想同時(shí)求解這樣兩組:  x + 2y = 3  4x + 5y = 6  和  x + 2y = 7  4x + 5y = 8  就可以這樣寫(xiě):  In [2]: import numpy as np  ...: A = np.mat('1,2; 4,5') # 構(gòu)造系數(shù)矩陣 A  ...: b = np.array([[3,6], [7,8]]).T # 構(gòu)造轉(zhuǎn)置矩陣 b (這里必須為列向量),  ...: 注意這里用的是 array  ...: r = np.linalg.solve(A,b) # 調(diào)用 solve 函數(shù)求解  ...: print r  ...:  Out[2]: [[-1. -6.33333333]  [ 2. 6.66666667]]  Scipy 求解非線(xiàn)性方程組  先看官方文檔的介紹:  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]  一般來(lái)說(shuō),我們只需要用到 func 和 x0 就夠了. func 是自己構(gòu)造的函數(shù),也就是需要求解的方程組的左端(右端為 0),而 x0 則是給定的初值.  我們來(lái)看一個(gè)具體的例子,求解:  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  就可以這么寫(xiě):  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]  當(dāng)然,SciPy 也可以用來(lái)求解線(xiàn)性方程組,這是因?yàn)?scipy.optimize.fsolve 本質(zhì)上是最小二乘法來(lái)逼近真實(shí)結(jié)果.  SymPy 通吃一切  例如求解一個(gè):  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 解數(shù)學(xué)方程?,就重點(diǎn)講述了 SymPy 解線(xiàn)性方程組的方法,所以我也就不再贅述了。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安阳市| 枝江市| 双桥区| 叙永县| 道孚县| 青龙| 阿拉善盟| 深水埗区| 江西省| 金门县| 洞口县| 井冈山市| 巴南区| 新巴尔虎左旗| 乌兰浩特市| 陵水| 廉江市| 霸州市| 苗栗市| 台湾省| 迁西县| 肥城市| 礼泉县| 得荣县| 澄城县| 宁明县| 乡城县| 盘锦市| 吴堡县| 成安县| 灵武市| 神木县| 达州市| 乐安县| 公安县| 靖边县| 日照市| 南城县| 巴南区| 旺苍县| 英吉沙县|