【问题标题】:Solve linear system using numpy [duplicate]使用 numpy 求解线性系统
【发布时间】:2020-04-03 18:21:28
【问题描述】:

我认为我应该使用两种方法(In[4]In[5])得到相同的结果。怎么了?我可以说正确的是In[5]

In [1]: import numpy as np

In [2]: A = np.mat('1 2 3; 4 5 6; 7 8 9')

In [3]: B = np.mat('10;20;30')

In [4]: A.I*B
Out[4]:
matrix([[ 64.],
        [-64.],
        [ 16.]])

In [5]: np.linalg.solve(A,B)
Out[5]:
matrix([[-0.93333333],
        [ 1.86666667],
        [ 2.4       ]])

【问题讨论】:

  • 矩阵 A = np.mat('1 2 3; 4 5 6; 7 8 9') 是奇异的,没有逆矩阵。你确定你做的是对的吗?
  • 我会想到同样的事情,但 64 和 -0.9 之间的差异对于浮点错误来说似乎有点极端
  • 更大的问题是上面矩阵的行列式应该为0,但是在矩阵类上调用np.linalg.det,却给出了一个很小的浮点数,这意味着它不会在矩阵求逆时引发。当我在等效数组上调用相同的函数时,我正确地得到 0。

标签: python numpy


【解决方案1】:

首先我相信 A 是单数的,所以这不起作用,你能展示你正在使用的实际矩阵吗?我已经测试了以下内容:

A = np.mat('1 0 3; 0 1 2; 0 3 1')   
B = np.mat('10;20;30') 

In [15]: np.linalg.solve(A,B)                                                                                                                                                     
Out[15]: 
matrix([[-8.],
        [ 8.],
        [ 6.]])

In [16]: A.I * B                                                                                                                                                                  
Out[16]: 
matrix([[-8.],
        [ 8.],
        [ 6.]])

它有效

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 2012-12-03
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2019-01-15
    • 2014-03-25
    • 2012-03-31
    相关资源
    最近更新 更多