Ganzzahlige Eigenwerte in Matlab

Ich versuche, ein Matlab-Programm zu schreiben, das entscheidet, ob eine gegebene (ganzzahlige) Matrix A ganzzahlige Eigenwerte hat, und wenn dies der Fall ist, die Eigenwerte und ihre Multiplizitäten berechnet. Irgendwelche Ideen, wie man anfängt?

Antworten (1)

Ein erster Schritt besteht darin, das charakteristische Polynom erhalten zu können P mit ganzzahligen Koeffizienten. Verwenden Sie dazu den Faddeev-Leverrier-Algorithmus .

In der Tat können Sie mit diesem Algorithmus ganzzahlige Werte die ganze Zeit beibehalten, da er Spuren von Potenzen Ihrer Matrix verwendet A .

Natürlich die Größe von A sollte nicht zu groß sein; Andernfalls wechselt Matlab bei einem bestimmten Schritt zu "Fließkomma" -Zahlen ...

Nun zu den Wurzeln. Da Wurzeln normalerweise in einem ziemlich engen Bereich liegen, bietet sich ein einfaches Testen beispielsweise mit ganzen Zahlen dazwischen an 1000 N 1000 ob P ( N ) = 0 oder nicht, wird die Arbeit erledigen ... in höchstens 1 Millisekunde. Die Frage nach Wurzeln mit absolutem Wert > 1000 können gesondert behandelt werden.

Testen Sie bei mehreren Wurzeln, ob P ( N ) = 0 Und P ' ( N ) = 0 für eine doppelte Wurzel ; wenn außerdem P ( N ) = P ' ( N ) = P ( N ) = 0 , es ist eine dreifache Wurzel usw.

Eine andere Art von Aktion, die die "eig"Funktion verwendet, liefert Ihnen die Gleitkommawerte von eignevalues. Wenn Sie diese Funktion verwenden dürfen , können Sie deren gerundeten Wert (auf die nächste ganze Zahl) nehmen und testen, ob diese gerundeten Werte (exakte!) Wurzeln des charakteristischen Polynoms sind.