import numpy as np
# A是对角阵
A=np.zeros(shape=(4,4))
for i in range(0,4):
A[i,i]=np.random.randint(0,8)
B=np.random.randint(1,6,size=(4,4))
# A为对角矩阵,B为随机4x4阵,对角阵左乘相当于乘每一行,右乘相当于乘每一列
display(A,B,A@B,B@A)
# 弄一个对称矩阵
A=np.zeros(shape=(4,4))
for i in range(0,4):
for j in range(0,4):
A[i,j]=A[j,i]=np.random.randint(0,7)
B=np.zeros(shape=(4,4))
for i in range(0,4):
for j in range(0,4):
B[i,j]=B[j,i]=np.random.randint(0,7)
# display(A,B,A.T,B.T)
# 检测矩阵是否对称
np.allclose(A,A.T)
# display((A+B).T,A+B,(A-B).T,A-B)
display((3*A).T,(3*A))
# 反对称矩阵
A=np.zeros(shape=(4,4))
for i in range(0,4):
for j in range(0,4):
# i,j不是主对角线元素才赋值,主对角线不动
if j!=i:
# 判断一下,A[i,j]为0才赋值.
if not A[i,j]:
A[i,j]=np.random.randint(1,10)
# 判断一下,A[j,i]为0才赋值。
if not A[j,i]:
A[j,i]=-A[i,j]
# display(A)
display(A,-A,A.T)
# display(A,np.allclose(-A,A.T))
def get_dy_hls(A,i,j):
if len(A)!=len(A[0]):
print('形状必须是方的')
sub_A=np.delete(A,i,axis=0)
sub_A=np.delete(sub_A,j,axis=1)
sub_A_hs=np.linalg.det(sub_A)
return (-1)**(i+j)*sub_A_hs
# 获取伴随矩阵
def get_bs_jz(A):
# display(len(A),A)
#创建(3,3)空矩阵
B=np.empty(shape=(len(A),len(A)))
# 每次遍历都获得该行的代数余子式
for i in range(0,len(A)):
# 内层循环获得的是第一行每个元素的代数余子式
for j in range(0,len(A)):
B[i,j]=get_dsyzs(A,i,j)
return B.T
# display(B)
# A的伴随矩阵
B=get_bs_jz(A)
E=np.eye(3)
A_hls=np.linalg.det(A)
#A的伴随矩阵的行列式
B_hls=np.linalg.det(B)
# AA*=A*A=|A|E
# display(A@B,B@A,A_hls*E)
# |A*||A|=|A|ⁿ
# display(B_hls,np.power(A_hls,3-1))
# A的逆矩阵就是A的行列式分之一*A的伴随矩阵
A_njz=(1/A_hls)*B
# display(A_hls,1/A_hls,B,A_njz)
#A和A逆相乘==单位阵E
# display(A@A_njz,A_njz@A,E)
#利用线性方法得到的逆矩阵
A_n=np.linalg.inv(A)
#A的伴随矩阵,公式A伴随=A逆*A行列式
A_bs=A_hls*A_n
# 两种方法得到的是一样的
# display(A_njz,A_n,A_bs,B)
#A的伴随矩阵的逆矩阵=1/|A|*A
B_n=1/A_hls*A
display(B_n,np.linalg.inv(B))