我用python重写了一个matlab代码,但结果不同

iyr7buue  于 2022-11-24  发布在  Matlab
关注(0)|答案(1)|浏览(186)

the matlab code and the output i was expecting (gauss elimination method)
我的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]]
8gsdolmq

8gsdolmq1#

您的问题与转换有关。如果没有信息,numpy会将您的矩阵转换为整数,因此当您除法时,结果不是浮点数。例如2 / 6 = 0而不是0.33333。如果您将

A = np.array([
    [1,2,-1,1],
    [-1,4,3,1],
    [2,1,1,1]], dtype=float)

您的结果将是

[[1. 0.  0. 0.33333333]
[0.  1.  0. 0.33333333]
[0.  0.  1. 0.]]

在matlab中没有这个问题,因为你的起始矩阵已经被转换成浮点数。

相关问题