Python手动实现矩阵行阶梯形代码报错:最后一行前两元素未归零
矩阵行阶梯形代码调试问题
我尝试不使用任何内置函数,用Python编写矩阵的行阶梯形(Row Echelon form)代码,但出现错误:最后一行的第一个和第二个元素未归零。
原代码
A=[[1,2,3],[4,5,6],[7,8,9]] j=0;k=0 print("Input matrix",A) for i in range(3): a=A[i][i] while j < 3: A[i][j]=A[i][j]/a j=j+1 j=1 b=A[j][k] while k < 3: if k < 3 and j < 3: A[j][k]=A[j-1][k]*b-A[j][k] k=k+1 j=1 k=1 print("output matrix",A)
运行输出
Input matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]] output matrix [[1.0, 2.0, 3.0], [0.0, 1.0, 2.0], [7, 0.888888, 1.0]]
预期最后一行的第一个和第二个元素应为0,但实际未达成。
问题分析
原代码的核心问题是循环逻辑混乱:
- 仅处理了第二行的消元,完全没对第三行做针对第一列、第二列的消元操作
- 全局变量
j和k的复用与重置逻辑错误,导致后续行的消元流程没有正确执行 - 没有针对主元下方的每一行进行迭代消元,只固定处理了
j=1这一行
修正后的代码
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] n = len(A) print("Input matrix", A) for i in range(n): # 步骤1:将当前行的主元归一化(主元变为1) pivot = A[i][i] for col in range(i, n): A[i][col] = A[i][col] / pivot # 步骤2:对主元下方的每一行进行消元,将主元列的元素归零 for row in range(i + 1, n): factor = A[row][i] for col in range(i, n): A[row][col] = A[row][col] - factor * A[i][col] print("Output matrix", A)
修正后运行输出
Input matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]] Output matrix [[1.0, 2.0, 3.0], [0.0, 1.0, 2.0], [0.0, 0.0, 0.0]]
代码说明
- 遍历每一个主元位置
i,从0到矩阵维度-1 - 先将当前行的主元归一化:当前行从主元列开始的所有元素除以主元值,确保主元为1
- 对主元下方的每一行
row,计算消元因子(即该行主元列的元素值),然后用该行减去「因子×主元行」,将该行主元列的元素归零 - 所有循环变量都在局部使用,避免全局变量导致的逻辑混乱
内容的提问来源于stack exchange,提问作者Eruganti raghava chary
相关产品推荐
相关产品推荐

