矩陣求逆運算 Python實現

2021-08-27 21:31:23 字數 3252 閱讀 1742

原理:應用列主元消去法運算矩陣a的逆矩陣,利用初等矩陣行變換a轉化單位矩陣時,同樣的行變化可將單位矩陣轉化為a的逆矩陣。

步驟:編制下三角部分消元和上三角部分消元的**

a. 從對角線元素往下比較取得這一列的最大值所在的行,與對角線元素所在行進行交換。

b. 從對角線所在行往下,利用矩陣的行變換將這一列下所有元素消為0,儲存消元過程中的係數(三角矩陣)

c. 類似b步驟從最後一列往前消元消成對角矩陣,同樣儲存消元過程中的係數

d. 從第一列開始依次進行a,b,c步驟

對角單位化(用一元陣列儲存)

矩陣每一行除對角線元素,將矩陣化為單位矩陣。

生成乙個與矩陣a同階的單位矩陣,對單位矩陣進行上述過程相同的行變化(取上述變換生成的主元交換和消元引數矩陣),即可以得到矩陣a的逆

# -*- coding: utf-8 -*-

"""@author: machinerandy

"""import warnings

warnings.filterwarnings("ignore")

matrix1 = [

[1,2,0,0],

[3,4,0,0],

[0,0,4,1],

[0,0,3,2],

]matrix2 = [

[1,0,-1,2,1],

[3,2,-3,5,-3],

[2,2,1,4,-2],

[0,4,3,3,1],

[1,0,8,-11,4],

]matrix3 = [

[1,0,-1,2,1,0,2],

[1,2,-1,3,1,-1,4],

[2,2,1,6,2,1,6],

[-1,4,1,4,0,0,0],

[4,0,-1,21,9,9,9],

[2,4,4,12,5,6,11],

[7,-1,-4,22,7,8,18],

]def

step0

(m):

n = len(m)

l =

for i in range(0,n):

for j in range(0,n):

if i == j:

else:

return l

defstep1

(m):

n = len(m)

"""交換操作記錄陣列 swap"""

swap =

l =

for i in range(0,n):

for j in range(0,n):

"""對每一列進行操作"""

for i in range(0,n):

max_row = m[i][i]

row = i

for j in range(i,n):

if m[j][i] >= max_row:

max_row = m[j][i]

global row

row = j

swap[i] = row

"""交換"""

if row != i:

for j in range(0,n):

m[i][j],m[row][j] = m[row][j],m[i][j]

"""消元"""

for j in range(i+1,n):

if m[j][i] != 0:

l[j][i] = m[j][i] / m[i][i]

for k in range(0,n):

m[j][k] = m[j][k] - (l[j][i] * m[i][k])

return (swap,m,l)

defstep2

(m):

n = len(m)

long = len(m)-1

l =

for i in range(0,n):

for j in range(0,n):

for i in range(0,n-1):

for j in range(0,long-i):

if m[long-i-j-1][long-i] != 0

and m[long-i][long-i] != 0:

l[long-i-j-1][long-i] = m[long-i-j-1][long-i] / m[long-i][long-i]

for k in range(0,n):

m[long-i-j-1][k] = m[long-i-j-1][k] - l[long-i-j-1][long-i] * m[long-i][k]

return (m,l)

defstep3

(m):

n = len(m)

l =

for i in range(0,n):

return l

defgauss

(matrix):

n = len(matrix)

new = step0(matrix)

(swap,matrix1,l1) = step1(matrix)

(matrix2,l2) = step2(matrix1)

l3 = step3(matrix2)

for i in range(0,n):

if swap[i] != i:

new[i],new[swap[i]] = new[swap[i]],new[i]

for j in range(i+1,n):

for k in range(0,n):

if l1[j][i] != 0:

new[j][k] = new[j][k] - l1[j][i] * new[i][k]

for i in range(0,n-1):

for j in range(0,n-i-1):

if l2[n-1-i-j-1][n-1-i] != 0:

for k in range(0,n):

new[n-1-i-j-1][k] = new[n-1-i-j-1][k] - l2[n-1-i-j-1][n-i-1] * new[n-1-i][k]

for i in range(0,n):

for j in range(0,n):

new[i][j] = new[i][j] / l3[i]

return new

x1 = gauss(matrix1)

x2 = gauss(matrix2)

x3 = gauss(matrix3)

python矩陣運算,轉置,逆運算,共軛矩陣例項

我就廢話不多說了,大家還是直接看 吧!先定義兩個矩陣 x np.array 1,2104,5,1,45 1,1416,3,2,40 1,1534,3,2,30 1,852,2,1,36 y np.array 45,40,30,36 內積以後發現 www.cppcns.comc np.dot x.t,...

矩陣運算的python實現

前言 一上學好多亂七八糟的事,志願活動呀,社會實踐呀,參加也後悔,不參加也後悔,有了更好的朋友就可以踩著原來的朋友向上嗎?空 之前矩陣覺得這個挺好的,那麼就看看如何進行直接計算吧,這樣的話,要是有題的話我就有矩陣計算器了呢。矩陣加法相比大家都知道的,就那樣,話不多說,來吧老鐵 矩陣相加 a 1 3,...

矩陣運算及 快速冪求矩陣

矩陣運算 這裡主要是針對方陣 是很重要的乙個環節,先說加法吧 加法比較簡單,同行同列想加就可以運算的 mat operator mat a,mat b 其次就是乘法 原理也簡單 線性代數應該學過,a i k 和 b k j 和做乘積運算得到c i j mat operator mat a,mat b...