【问题标题】:Matrix solution with Numpy: no solution?使用 Numpy 的矩阵解决方案:没有解决方案?
【发布时间】:2013-09-14 04:32:31
【问题描述】:

在 Numpy 中运行一个简单的脚本来求解一个由 3 个方程组成的系统:

from numpy import *
a = matrix('1 4 1; 4 13 7; 7 22 13')
b = matrix('0;0;1')
print linalg.solve(a,b)

但是当我通过命令提示符运行它时,我以某种方式得到:

[[  3.46430741e+15]
 [ -6.92861481e+14]
 [ -6.92861481e+14]]

虽然 Wolfram Alpha 说没有解决方案。

有谁知道为什么 Numpy/WRA 答案之间似乎存在这种差异?

【问题讨论】:

  • google.com/#q=WRA WRA 到底是什么?
  • @Josh WRA == Wolfram Alpha
  • @KDawG 啊,明白了。我想我从来没有见过这个缩写词。将计算系统称为 Mathematica(“WRA”背后的大脑)可能会更好。 The first was Mathematica—the system in which all of Wolfram|Alpha is implemented.wolframalpha.com/about.html

标签: python numpy


【解决方案1】:

如果你拿笔和纸(或使用numpy.linalg.matrix_rank)并计算系数和增广矩阵的等级,你会发现,根据Rouché–Capelli theorem,没有解决方案。所以 Wolfram 是对的。

NumPy 使用 LU 分解搜索方程的数值解。无需赘述LU decomposition 涉及除法,FP 算术中的除法会导致严重错误。

如果你检查:

a = np.matrix('1 4 1; 4 13 7; 7 22 13')
b = np.matrix('0;0;1')

c = np.linalg.solve(a,b)
np.linalg.norm(a * c - b)
## 2.0039024427351748

您会发现 NumPy 解决方案远非正确。

【讨论】:

    猜你喜欢
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多