第六篇:矩陣的初等變換


矩陣的初等變換

矩陣的初等變換

行階梯形矩陣

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()))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM