矩阵函数的封装
1.定义函数,实现求矩阵的行列式
def Isdet(A):
# 矩阵的行数=列数:方阵,只有方阵才有行列式
if A.shape[0]==A.shape[1]:
print('A是方阵,存在行列式。|A|=',np.linalg.det(A))
else:
print('A不是方阵,不存在行列式')
2.定义函数,实现求矩阵的秩
def Rank(A):
rA=np.linalg.matrix_rank(A)
print('矩阵的秩:',rA)
3.定义函数,判断矩阵是否有逆矩阵,若存在,输出逆矩阵
def Isinv(A):
# 如果行列式的值不等于0,存在逆矩阵
if np.linalg.det(A)!=0:
print('存在逆矩阵,为\n',np.linalg.inv(A))
else:
print('不存在逆矩阵')
4.定义函数,实现求矩阵的伴随矩阵
def Bansui(A):
Bs=np.linalg.inv(A)*np.linalg.det(A)
print('矩阵的伴随矩阵:\n',Bs)
5.定义函数,判断齐次线性方程组AX=0的解的情况,若存在唯一解并输出
#方法一
def JudgeA(A):
# 如果行列式|A|≠0,存在唯一零解;|A|=0,存在无穷解
if np.linalg.det(A)!=0:
print('存在唯一零解',np.linalg.solve(A,[0,0,0]))
else:
print('存在无穷解')
#方法二
def Judge2(A):
#如果 R(A)=n,存在唯一零解;R(A)<n,存在无穷解 (n:未知数的个数=列数)
if np.linalg.matrix_rank(A)==A.shape[1]:
print('存在唯一零解', np.linalg.solve(A, [0, 0, 0]))
else:
print('存在无穷解')
6.定义函数,判断非齐次线性方程组AX=b的解的情况,若存在唯一解并输出
def JuAXb(A,b):
rA=np.linalg.matrix_rank(A) #系数矩阵的秩
Ab=np.c_[A,b]
rAb=np.linalg.matrix_rank(Ab) #增广矩阵的秩
#如果系数矩阵的秩 ≠ 增广矩阵的秩 :无解
if rA!=rAb:
print('方程组AX=b无解')
#如果系数矩阵的秩 =增广矩阵的秩 =n :唯一解 (n:未知数的个数=系数矩阵的列数)
elif rA==rAb==A.shape[1]:
print('方程组AX=b有唯一解,为',np.linalg.solve(A,b))
#如果系数矩阵的秩 =增广矩阵的秩 <n :无穷解
else:
print('方程组AX=b有无穷解')
7.定义函数,实现求矩阵的特征值与特征向量
def Iseig(A):
a,b=np.linalg.eig(A)
print('特征值:',a)
print('特征向量 \n',b)
8.代码运行
if __name__ == '__main__':
A=np.array([[2,-1,0],
[1,3,1],
[0,1,2]])
print('A=\n',A)
Isdet(A)
Rank(A)
Isinv(A)
Bansui(A)
JudgeA(A)
b=[1,2,0]
JuAXb(A,b)
Iseig(A)