6

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 の回答にこの違いがあるように見える理由を知っている人はいますか?

4

1 に答える 1

8

ペンと紙を用意して (または を使用して)、係数と拡張行列のランクを計算すると、 Rouché–Capelli の定理によると、解がないnumpy.linalg.matrix_rankことがわかります。したがって、Wolfram は正しいです。

NumPy は、LU 分解を使用して方程式の数値解を検索します。詳細に立ち入ることなく、 LU 分解には除算が含まれます。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 ソリューションが正しくないことがわかります。

于 2013-09-14T05:03:28.667 に答える