MATLAB高斯消元法代码转Python后输出结果不一致问题
高斯消元法Python与MATLAB实现结果不一致
我将实现高斯消元法的MATLAB代码改写为Python代码后,两者输出结果不匹配。以下是相关内容:
我的Python代码
import numpy as np A = np.array([ [1,2,-1,1], [-1,4,3,1], [2,1,1,1]]) n = rows = len(A) col = len(A[0]) for i in range(n): A[i,:] = A[i,:] / A[i,i] for j in range(n): if i==j: pass else: A[j,:] = A[j,:] - (A[i,:] * A[j,i]) print(A)
实际输出
[[1 0 0 1] [0 1 0 0] [0 0 1 0]]
问题原因与修正
问题出在numpy数组的默认数据类型:创建的数组是整数类型,执行除法时会自动做整数截断,丢失小数部分,导致后续消元计算全部错误。
修正后的代码只需在创建数组时指定dtype=np.float64(或float),确保浮点运算:
import numpy as np # 指定浮点类型,避免整数除法截断 A = np.array([ [1,2,-1,1], [-1,4,3,1], [2,1,1,1]], dtype=np.float64) n = rows = len(A) col = len(A[0]) for i in range(n): # 归一化当前行 A[i,:] = A[i,:] / A[i,i] # 消去其他行的当前列 for j in range(n): if i != j: A[j,:] = A[j,:] - A[i,:] * A[j,i] print(A)
修正后输出
[[1. 0. 0. 0.33333333] [0. 1. 0. 0.33333333] [0. 0. 1. 0. ]]
这个结果与MATLAB的预期输出一致,代入原方程组验证也完全符合:
- 第一个方程:$1\times\frac{1}{3} + 2\times\frac{1}{3} -1\times0 = 1$,成立
- 第二个方程:$-1\times\frac{1}{3} +4\times\frac{1}{3}+3\times0=1$,成立
- 第三个方程:$2\times\frac{1}{3}+1\times\frac{1}{3}+1\times0=1$,成立
内容的提问来源于stack exchange,提问作者Ali Yhyee
相关产品推荐
相关产品推荐

