无法在逆矩阵函数(Python 3.6)上将序列乘以'float'

时间:2018-10-20 15:45:04

标签: python list matrix floating-point

我正在尝试制作一个逆输入4 x 4矩阵的函数

我不允许使用模块或数组,仅允许使用“列表”和“嵌套列表理解”

这是我所有基于高斯乔丹消除法的脚本

matrix=[]
i=0

for i in range(4):
    row= []
    a,b,c,d=input("Enter the row: ").split()
    row.append(float(a))
    row.append(float(b))
    row.append(float(c))
    row.append(float(d))


    matrix.append(row)

print ("The matrix you entered : ","\n")

for row in matrix:
    print((row))

def inverse(matrix):
    Default=[[1,0,0,0],
             [0,1,0,0],
             [0,0,1,0],
             [0,0,0,1]]

    Default[1]-=float(matrix[1][0]/matrix[0][0])*Default[0]
    Default[2]-=float(matrix[2][0]/matrix[0][0])*Default[0]
    Default[3]-=float(matrix[3][0]/matrix[0][0])*Default[0]

    matrix[1]-=float(matrix[1][0]/matrix[0][0])*matrix[0]
    matrix[2]-=float(matrix[2][0]/matrix[0][0])*matrix[0]
    matrix[3]-=float(matrix[3][0]/matrix[0][0])*matrix[0]

    Default[2]-=(matrix[2][1]/matrix[1][1])*Default[1]
    Default[3]-=(matrix[3][1]/matrix[1][1])*Default[1]
    matrix[2]-=(matrix[2][1]/matrix[1][1])*matrix[1]
    matrix[3]-=(matrix[3][1]/matrix[1][1])*matrix[1]

    Default[3]-=(matrix[3][2]/matrix[2][2])*Default[2]
    matrix[3]-=(matrix[3][2]/matrix[2][2])*matrix[2]

    Default[3]=Default[3]/(matrix[3][3])
    matrix[3]=matrix[3]/(matrix[3][3])

    Default[2]-=Default[3]*(matrix[2][3])
    Default[1]-=Default[3]*(matrix[1][3])
    Default[0]-=Default[3]*(matrix[0][3])
    matrix[2]-=matrix[3]*(matrix[2][3])
    matrix[1]-=matrix[3]*(matrix[1][3])
    matrix[0]-=matrix[3]*(matrix[0][3])

    Default[2]=Default[2]/(matrix[2][2])
    matrix[2]=matrix[2]/(matrix[2][2])

    Default[1]-=Default[2]*(matrix[1][2])
    Default[0]-=Default[2]*(matrix[0][2])
    matrix[1]-=matrix[2]*(matrix[1][2])
    matrix[0]-=matrix[2]*(matrix[0][2])

    Default[1]=Default[1]/(matrix[1][1])
    matrix[1]=matrix[1]/(matrix[1][1])

    Default[0]-=Default[1]*(matrix[0][1])
    matrix[0]-=matrix[1]*(matrix[0][1])

    Default[0]=Default[0]/(matrix[0][0])
    matrix[0]=matrix[0]/(matrix[0][0])

    return Default

print(inverse(matrix))

我不确定我的方法是否正确,甚至此脚本也会因[Typeerror:Ca n't乘法乘以'float']而崩溃

有人知道我应该在代码上解决什么吗?感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您正在尝试将列表乘以浮点数。那不符合您的期望(它不执行元素乘法)。

即使这将引发相同的错误:

float(3)*[1,2]

您应该进行以下更改:

Default[1]-= [float(matrix[1][0]/matrix[0][0])*i for i in Default[0]]

在各个地方。