【发布时间】:2020-06-26 14:23:00
【问题描述】:
我无法弄清楚我的代码有什么问题,这非常令人沮丧。 我必须制作逆矩阵函数,我认为我已经完成了。我不知道为什么它不起作用。问题可能与星星有关,经过这一步我的矩阵名为 mat 更改为单位矩阵,但为什么呢?在加星之前,它会正常打印我赋予功能的垫子矩阵,但在加星之后,它是一个单位矩阵,我不明白为什么会发生这种情况。这是我所拥有的:
def identity_matrix_convertion(m):
x = m[:]
for i in range(len(x)):
for j in range(len(x[0])):
if i == j:
x[i][j] = 1
else:
x[i][j] = 0
return x
def inverse_matrix(mat):
n = len(mat)
am = mat[:]
show_matrix(mat)
**i = identity_matrix_convertion(am)**
show_matrix(mat)
im = i[:]
ind = list(range(n))
print(len(mat))
if determinant(mat) == 0:
print("This matrix doesn't have an inverse.")
if len(mat) == len(mat[0]):
for i in range(n):
scal = 1.0 / am[i][i]
for j in range(n):
am[i][j] *= scal
im[i][j] *= scal
for k in ind[0:i] + ind[i + 1:]:
current_scal = am[k][i]
for l in range(n):
am[k][l] = am[k][l] - current_scal * am[i][j]
im[k][l] = im[k][l] - current_scal * im[i][j]
return im
so after line **i = identity_matrix_convertion(am)** my mat matrix is changed into identity matrix, but why?
The result is:
1.0 2.0 3.0
2.0 1.0 3.0
4.0 3.0 2.0
The result is:
1 0 0
0 1 0
0 0 1
【问题讨论】:
-
提供一些示例输入并显示您遇到了什么错误
-
请将此减少并增强为预期的MRE。显示中间结果与预期结果的偏差。另外,请学习格式化和标记您的输出;你把你的操作隐藏在不可读的
print命令中。 -
这将仅用于 2x2 矩阵或更大的矩阵吗?您是否需要此代码来处理任何和所有维度,或者您是否知道您将获得的矩阵的维度?
-
它也适用于更高的维度。用户必须先指定昏暗和输入矩阵,这是较大程序的一部分。
-
你确定矩阵有逆矩阵吗?如果没有,您可能希望将其添加到
identity_matrix_conertion()的顶部:if len(m) == 0: return None if len(m[0]) != len(m): return None
标签: python matrix-inverse