第六篇:矩阵的初等变换


矩阵的初等变换

矩阵的初等变换

行阶梯形矩阵

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