java 计算矩阵行列式,为什么在递归期间变量发生了变化(尝试计算矩阵行列式)...

我正在尝试使用简单递归来计算矩阵(行主序)的行列式,但由于某种原因,变量 matrix 在最后一个循环期间发生了变化,我不会写任何改变变量值的代码所有 .

import math

def print_m(matrix): # Print the matrix

for i in range(len(matrix)):

print(matrix[i])

def determinant(matrix):# return determinant assuming scanning through first row

if len(matrix[0]) != len(matrix):

print('Not square matrix')

return None

if len(matrix) == 2:

print('LAST STEP EXECUTED')

return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]

def get_reduced_matrix(matrix, column): #not responsible for changin sign

newM = matrix[1:]

for i in range(len(matrix) - 1):

del newM[i][column]

return newM

output = 0

for i in range(len(matrix)): #value of matrix changed when i turned into 1

print("i =", i)

print_m(matrix)

print('END')

output += matrix[0][i] * determinant(get_reduced_matrix(matrix, i)) * math.pow(-1, i + 1) # change in sign at last

print('Gonna do the loop again')

return output

matrix1 = [

[11, 12, 13],

[21, 22, 23],

[31, 32, 33]

]

print(determinant(matrix1))

输出:

C:\Users\jason\Desktop\Python\venv\Scripts\python.exe C:/Users/jason/.PyCharmCE2018.1/config/scratches/sdf.py

i = 0

Traceback (most recent call last):

File "C:/Users/jason/.PyCharmCE2018.1/config/scratches/sdf.py", line 38, in

[11, 12, 13]

print(determinant(matrix1))

[21, 22, 23]

[31, 32, 33]

File "C:/Users/jason/.PyCharmCE2018.1/config/scratches/sdf.py", line 26, in determinant

end

output += matrix[0][i] * determinant(get_reduced_matrix(matrix, i)) * math.pow(-1, i + 1) # change in sign at last

LAST STEP EXECUTED

TypeError: unsupported operand type(s) for *: 'int' and 'NoneType' #MATRIX LOST SOME OF ITS VALUE HERE

gonna do the loop again

i = 1

[11, 12, 13]

[22, 23]

[32, 33]

end

Not square matrix

Process finished with exit code 1

因此矩阵在第2和第3行中丢失了第一列条目,并且我不会编写任何可以首先更改 matrix 值的代码 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值