You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:16:07