基於python解線性矩陣方程(numpy中的matrix類)
阿新 • • 發佈:2020-01-09
這學期有一門運籌學,講的兩大塊兒:線性優化和非線性優化問題。在非線性優化問題這裡涉及到拉格朗日乘子法,經常要算一些非常變態的線性方程,於是我就想用python求解線性方程。查閱資料的過程中找到了一個極其簡單的解決方式,也學到了不少東西。先把程式碼給出。
import numpy as np # A = np.mat('1 2 3;2 -1 1;3 0 -1') A = np.array([[1,2,3],[2,-1,1],[3,-1]]) b = np.array([9,8,3]) x = np.linalg.solve(A,b) print(x)
是不是很簡潔?因為呼叫了強大的包numpy~ 我們想解決的問題是求解矩陣方程Ax=bAx=b。在這裡呼叫numpy中的線性代數包np.linalg,使用其中的function->solve(A,b)。幾行程式碼就解決了問題。在這裡solve函式有兩個輸入,第一個輸入是矩陣,可以採用numpy裡的矩陣資料型別或者最常用的陣列資料型別。第二個輸入是右端項b,一個一維numpy陣列即可。函式返回方程的解,shape和b是相同的。如果矩陣A是奇異的或者不是方陣,函式就會報錯。
好了,問題得到了絕佳的解決,大不了把python當計算器來用唄~
下面是補充知識:numpy中的matrix類
matrix類是numpy中的一個過時的類,可能會在未來被移除。因為現在大多數人都會用更加靈活好用的ndarray,移除它也是可以理解的。
>>> a = np.matrix('1 2; 3 4') >>> a matrix([[1,2],4]]) >>> np.matrix([[1,4]]) matrix([[1,4]])
matrix有兩種構造方式,從第二種我們看到和一般的陣列型別一模一樣,在這裡我們就能窺到matrix其實就是繼承了ndarray,基於ndarray。拿matrix進行線性代數運算是因為它有很多方便的函式。
matrix.T transpose:返回矩陣的轉置矩陣 matrix.H hermitian (conjugate) transpose:返回複數矩陣的共軛元素矩陣 matrix.I inverse:返回矩陣a逆矩陣 matrix.A base array:返回矩陣基於的陣列<br data-filtered="filtered">matrix.AI flattened ndarray: 返回展平的陣列
其他的很多類方法不再介紹,以上四個是最基本的類似語法糖的函式。
需要注意的是,ndarray型別同樣能方便地進行轉置和求逆。
A = np.array([[1,4]]) print(A.T) A_I = np.linalg.inv(A)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。