Ich schrieb einen einfachen linearen Algebra-Code in Python Numpy, um die Diagonale von Eigenwerten zu berechnen, indem $ M^{- 1} .A.M $ berechnet wird (M ist die Modal Matrix) und es funktioniert seltsam.Numpy - Modale Matrix und diagonale Eigenwerte
Hier ist der Code:
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]]
die letzte ‚Diagonale‘ Matrix eine Diagonalmatrix mit den Eigenwerten auf den Hauptdiagonalen und Nullen an anderer Stelle sein sollte. aber es ist nicht ... die beiden ersten Hauptdiagonalwerte sind Eigenwerte, aber die zwei Sekunden sind nicht (obwohl sie genau wie die zwei zweiten Eigenwerte fast Null sind).
und übrigens ist eine Zahl wie $ -1.06581410e-14 $ buchstäblich Null, also wie kann ich machen, dass numpy sie als Null zeigt?
Was mache ich falsch?
Dank ...
Hinweis: Zeile 3 = 2 * Zeile 2 - Zeile 1 –
Uh oh ... dann ... die Determinante der Matrix ist Null? und det (A) = Produkt von Eigenwerten ... und Eigenwerte sollten Null sein? wenn ich es bis hier richtig verstanden habe, warum berechnet dann numpy EigenValues und gibt nicht 0 als Antwort? – Cypher
alles ist in Ordnung. Betrachte im float-Wort, dass jeder Wert <1e-15 null ist. Versuchen Sie diagonal.round (13) und matrix_rank (array). –