3x3矩阵的计算 python

python学到序列了 看书上有写怎么用序列表示矩阵

并且深受线性代数作业的折磨就突发奇想用一个小时写了个程序

完全就是不动脑子的方法 发一个文章记录一下自己的成果

#矩阵转置函数
def transform(m):
    rt = [[] for i in m[0]]    # m[0] 有几个元素,说明原矩阵有多少列。此处创建转置矩阵的行
    for ele in m:
        for i in range(len(ele)):
            # rt[i] 代表新矩阵的第 i 行
            # ele[i] 代表原矩阵当前行的第 i 列
            rt[i].append(ele[i])
    return rt

#读入矩阵s
s1=[];s2=[];s3=[];s=[]
x11,x12,x13=map(int,input().split())
x21,x22,x23=map(int,input().split())
x31,x32,x33=map(int,input().split())
s1.append(x11);s1.append(x12);s1.append(x13)
s2.append(x21);s2.append(x22);s2.append(x23)
s3.append(x31);s3.append(x32);s3.append(x33)
s.append(s1);s.append(s2);s.append(s3)
print("原矩阵为:\n{}".format(s))

#a是矩阵所对应的行列式
a=s[0][0]*(s[1][1]*s[2][2]-s[1][2]*s[2][1])-s[0][1]*(s[1][0]*s[2][2]-s[1][2]*s[2][0])+s[0][2]*(s[1][0]*s[2][1]-s[1][1]*s[2][0])
print("对应的行列式的值为:\n{}".format(a))

#原矩阵的转置为p
p=transform(s)
#print("转置为:\n{}".format(p))

#求各元素的代数余子式t
t1=[];t2=[];t3=[];t=[]
y11=s[1][1]*s[2][2]-s[1][2]*s[2][1];y12=s[2][0]*s[1][2]-s[1][0]*s[2][2];y13=s[1][0]*s[2][1]-s[1][1]*s[2][0];
y21=s[0][2]*s[2][1]-s[0][1]*s[2][2];y22=s[0][0]*s[2][2]-s[0][2]*s[2][0];y23=s[0][1]*s[2][0]-s[0][0]*s[2][1];
y31=s[0][1]*s[1][2]-s[0][2]*s[1][1];y32=s[0][2]*s[1][0]-s[0][0]*s[1][2];y33=s[0][0]*s[1][1]-s[1][0]*s[0][1];
t1.append(y11);t1.append(y12);t1.append(y13)
t2.append(y21);t2.append(y22);t2.append(y23)
t3.append(y31);t3.append(y32);t3.append(y33)
t.append(t1);t.append(t2);t.append(t3)
print("矩阵所对应的行列式的各元素的代数余子式为:\n{}".format(t))

#伴随矩阵r
r=transform(t)
print("伴随矩阵为:\n{}".format(r))


#逆矩阵
u1=[];u2=[];u3=[];u=[]
b=1/a
u11=r[0][0]*b;u12=r[0][1]*b;u13=r[0][2]*b;
u11=round(u11,2);u12=round(u12,2);u13=round(u13,2);
u21=r[1][0]*b;u22=r[1][1]*b;u23=r[1][2]*b;
u21=round(u21,2);u22=round(u22,2);u23=round(u23,2);
u31=r[2][0]*b;u32=r[2][1]*b;u33=r[2][2]*b;
u31=round(u31,2);u32=round(u32,2);u33=round(u33,2);
u1.append(u11);u1.append(u12);u1.append(u13)
u2.append(u21);u2.append(u22);u2.append(u23)
u3.append(u31);u3.append(u32);u3.append(u33)
u.append(u1);u.append(u2);u.append(u3)
print("逆矩阵为:\n{}".format(u))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值