python利用numpy创建对角阵,对称阵,反对称阵,python伴随矩阵,逆矩阵

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值