矩陣的初等變換
矩陣的初等變換
行階梯形矩陣
from sympy.matrices import Matrix import random random.seed(28) m = Matrix([[2,-1,-1,1,2],[1,1,-2,1,4],[4,-6,2,-2,4],[3,6,-9,7,9]]) print(m.rref())
行最簡形
import numpy as np def rsmat(arbmat): """ Convert an arbitrary matrix to a simplest matrix """ arbmat = arbmat.astype(float) row_number, column_number = arbmat.shape if row_number == 1: if arbmat[0, 0] != 0: return (arbmat/arbmat[0, 0]) else: return arbmat else: rc_number = min(row_number, column_number) anarbmat = arbmat.copy() r = 0 for n in range(rc_number): s_row = -1 for i in arbmat[r:row_number, n]: s_row += 1 if abs(i) > 1e-10: anarbmat[r, :] = arbmat[s_row+r, :] for j in range(r, row_number): if j < s_row+r: anarbmat[j+1, :] = arbmat[j, :] arbmat = anarbmat.copy() if abs(anarbmat[r, n]) > 1e-10: anarbmat[r, :] = anarbmat[r, :] / anarbmat[r, n] for i in range(row_number): if i != r: anarbmat[i, :] -= \ anarbmat[i, n]*anarbmat[r, :] arbmat = anarbmat.copy() if abs(arbmat[r, n]) < 1e-10: r = r else: r = r + 1 for m in range(column_number): if abs(arbmat[-1, m]) > 1e-10: arbmat[-1, :] = arbmat[-1, :]/arbmat[-1, m] for i in range(row_number-1): arbmat[i, :] -= \ arbmat[i, m]*arbmat[-1, :] break return arbmat a = np.matrix([[1,2,2,1],[2,2,1,1],[2,1,0,1],[1,1,1,1]]) a1 = rsmat(a) print(a1)
矩陣標准形
初等變換與矩陣乘法關聯定理
from sympy.matrices import Matrix,eye m = Matrix([[2,-1,-1],[1,1,-2],[4,-6,2]]) e = eye(3) mm = m.row_join(e) #增廣矩陣 F,c= mm.rref() pprint(F) print() P = F[:,3:6] pprint(P*m)
from sympy import pprint from sympy.matrices import Matrix A = Matrix([[0,-2,1],[3,0,-2],[-2,3,0]]) if A.shape[0] == A.shape[1]: A_det = A.det() if A_det != 0: print('矩陣A的行列式為:{},則矩陣A可逆,A的逆矩陣是:'.format(A_det)) pprint(A.inv()) else: print('矩陣A的行列式等於零,矩陣A不可逆。') else: print('矩陣A不是方陣。')
from sympy import pprint from sympy.matrices import Matrix A = Matrix([[2,1,-3],[1,2,-2],[-1,3,2]]) B = Matrix([[1,-1],[2,0],[-2,5]]) X = A.LUsolve(B) print('X = ') pprint(X)
總結:
若矩陣做初等行變換,則左乘一個矩陣。
若矩陣做初等列變換,則右乘一個矩陣。
矩陣的秩
秩的求法
from sympy import pprint from sympy.matrices import Matrix A = Matrix([[1,2,1],[-2,1,-7],[3,0,9]]) print('A矩陣的行最簡型:') pprint(A.rref()[0]) print('A矩陣的秩是:{}'.format(A.rank()))