2016-04-03 8 views
1

$ M^{ - 1} .A.M $(MはModal Matrix)を計算してEigenValuesの対角を計算すると、Python Numpyで単純な線形代数コードを書いた。最後の「対角」行列は、他の場所での主対角線上の固有値と零点と対角行列でなければなりませんNumpy - Modal行列と対角固有値

import numpy as np 

array = np.arange(16) 
array = array.reshape(4, -1) 
print(array) 

[[ 0 1 2 3] 
[ 4 5 6 7] 
[ 8 9 10 11] 
[12 13 14 15]] 

eigenvalues, eigenvectors = np.linalg.eig(array) 

print eigenvalues 
[ 3.24642492e+01 -2.46424920e+00 1.92979794e-15 -4.09576009e-16] 

print eigenvectors 
[[-0.11417645 -0.7327781 0.54500164 0.00135151] 
[-0.3300046 -0.28974835 -0.68602671 0.40644504] 
[-0.54583275 0.15328139 -0.2629515 -0.8169446 ] 
[-0.76166089 0.59631113 0.40397657 0.40914805]] 

inverseEigenVectors = np.linalg.inv(eigenvectors) #M^(-1) 
diagonal= inverseEigenVectors.dot(array).dot(eigenvectors) #M^(-1).A.M 

print(diagonal) 
[[ 3.24642492e+01 -1.06581410e-14 5.32907052e-15 0.00000000e+00] 
[ 7.54951657e-15 -2.46424920e+00 -1.72084569e-15 -2.22044605e-16] 
[ -2.80737213e-15 1.46768503e-15 2.33547852e-16 7.25592561e-16] 
[ -6.22319863e-15 -9.69656080e-16 -1.38050658e-30 1.97215226e-31]] 

は、ここでのコードです。しかし、そうではありません... 2つの最初の主対角線の値は固有値ですが、2つ目の2つの固有値はありません(2つの2番目の固有値のように、ほとんどゼロになります)。

そして、$ -1.06581410e-14 $のような数字は文字どおりゼロですので、どうすればnumpyを0にすることができますか?

私は間違っていますか?

おかげで...

+2

ヒント:行3 = 2 *行2 - 行1 –

+1

Uh oh ... then ...行列の決定子はゼロですか? det(A)=固有値の積...固有値はゼロでなければなりませんか?私がここまでそれを持っていれば、numpyはEigenValuesを計算し、答えとして0を与えないのはなぜですか? – Cypher

+2

すべては問題ありません。 float wordでは、<1e-15の値がすべてNULLであるとみなします。 diagonal.round(13)、matrix_rank(array)を試してください。 –

答えて

2

ちょうど希望の数字に最終結果を丸める:

print(diagonal.round(5)) 

array([[ 32.46425, 0.  , 0.  , 0.  ], 
     [ 0.  , -2.46425, 0.  , 0.  ], 
     [ 0.  , 0.  , 0.  , 0.  ], 
     [ 0.  , 0.  , 0.  , 0.  ]]) 

計算と印刷政策の精度を混同しないでください。

+0

ありがとう...私はこれを念頭に置いています... – Cypher

1
>>> diagonal[np.abs(diagonal)<0.0000000001]=0 
>>> print diagonal 
[[ 32.4642492 0.   0.   0.  ] 
[ 0.   -2.4642492 0.   0.  ] 
[ 0.   0.   0.   0.  ] 
[ 0.   0.   0.   0.  ]] 
>>> 
+0

ありがとう...私は2つのベストアンサーを選択することができます... – Cypher

+0

あなたはとても親切です! B.M.の答えには独自の利点があります(+1からB.M) – Yaron