在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答案之间似乎存在这种差异?
答案 0 :(得分:8)
如果您使用笔和纸(或使用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解决方案远非正确。