Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python

Gleichung n-ter Ordnung

x^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0 =0

Ich stieß auf eine Situation, die ich lösen wollte. Ich habe das Gefühl, dass dies allgemein als Gleichung n-ter Ordnung bezeichnet wird. (Wird es auch eine einvariable algebraische Gleichung genannt?) Es ist bekannt, dass es für Personen ab Grad 5 keine algebraische Lösung gibt. Es scheint jedoch, dass die fünfte Ordnung unter Verwendung verschiedener Sonderfunktionen ausgedrückt werden kann und die ungefähre Lösung numerisch berechnet werden kann. Es scheint normal zu sein, numerische Berechnungen für die 4. Ordnung und höher zu verwenden. Es scheint, dass Matlab eine Funktion namens Roots hat, die numerische Berechnungen algebraischer Gleichungen durchführt, aber ich konnte keine Bibliothek in Python finden. Deshalb habe ich beschlossen, es umzusetzen.

Algorithmus

Die Newton-Methode scheint bei der Suche nach einer Lösung an erster Stelle zu stehen, aber es scheint, dass die DKA-Methode als Algorithmus bekannt ist, der der Newton-Methode zum Finden der Lösung einer Gleichung n-ter Ordnung ähnlich ist. Die Implementierung dieses Algorithmus ist jedoch mühsam. Wenn Sie sich Matlab-Implementierung ansehen, können Sie eine Methode verwenden, die zur Berechnung des Eigenwerts führt. Es scheint zu geben. Diesmal habe ich mich dazu entschlossen. Bei der Berechnung von Eigenwerten nach Definition

 \mathrm{det}(sI-A)=0

A=
\left(
    \begin{array}{ccccc}
      0 & 1 & 0&\ldots&0  \\
      \vdots & \ddots & 1&\ddots&\vdots \\
      \vdots & \ldots & \ddots&\ddots&0\\
      0&\ldots&\ldots&0&1\\
-a_0&-a_1&\ldots&-a_{n-2}&-a_{n-1}
    \end{array}
  \right)

Die Eigengleichung hierfür lautet


|sI-A| = s^n+a_{n-1}s^{n-1}+a_{n-2}s^{n-2}+\ldots+a_1s+a_0

Wird sein. Wenn daher alle Eigenwerte der obigen Begleitmatrix für die Gleichung n-ter Ordnung mit einem beliebigen Koeffizienten berechnet werden, kann eine Lösung erhalten werden. Die zuerst eingeführte DKA-Methode finden Sie unter hier. Implementierung war ebenfalls ausgefallen.

Implementierung

n-poly.py


import numpy as np
def solve(vec,is_complex=False):
    dim =len(vec)
    if is_complex:
        A = np.zeros((dim,dim),dtype=complex)
    else:
        A = np.zeros((dim,dim))
    A[np.arange(dim-1),1+np.arange(dim-1)] =1
    A[-1,:] = -vec
    ans,vec = np.linalg.eig(A)
    return ans

vec0 =np.array([-120,274,-225,85,-15])
vec1 =np.array([1,0])
vec2 =np.array([-1,5,-10,10,-5])
print(solve(vec0))
print(solve(vec1))
print(solve(vec2))

[ 5.  4.  3.  2.  1.]
[ 0.+1.j  0.-1.j]
[ 1.00079742+0.00057977j  1.00079742-0.00057977j  0.99969502+0.00093688j
  0.99969502-0.00093688j  0.99901512+0.j        ]

Beachten Sie, dass, wenn der Koeffizient eine imaginäre Zahl enthält, der Koeffizient in eine reelle Zahl umgewandelt wird, ohne is_complex auf True zu setzen. Wenn dtype = complex immer gesetzt ist, scheint es schwierig zu sein, den realen Eigenwert als realen Eigenwert zu berechnen, daher wird er normalerweise durch float berechnet (Unterscheidet sich der Algorithmus je nach dtype?)

Jedes Beispiel

(x-1)(x-2)(x-3)(x-4)(x-5)=x^5-15x^4+85x^3-225x^2+274x-120=0\\
x^2+1=(x-i)(x+i)=0\\
(x-1)^5=0

Wird berechnet. Es ist ersichtlich, dass selbst Gleichungen fünfter Ordnung ohne Lösungsformel mit angemessener Genauigkeit berechnet werden, einschließlich mehrerer Lösungen.

Verweise

Nachweis der Beziehung zwischen Begleitmatrix und charakteristischer Polyma

Recommended Posts

Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Lösen von Bewegungsgleichungen in Python (odeint)
Implementieren Sie die Lösung der Riccati-Algebra in Python
[Wissenschaftlich-technische Berechnung mit Python] Analytische Lösungssympathie zur Lösung von Gleichungen
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Lassen Sie das Gleichungsdiagramm der linearen Funktion in Python zeichnen
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Das Ergebnis der Installation von Python auf Anaconda
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Doppelte Pendelbewegungsgleichung in Python
Finden Sie die numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung mit scipy
Finden Sie das maximale Python
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
der Zen von Python
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Die findähnliche Sache der Liste in Python
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Ausgabe in Form eines Python-Arrays
[Python] Finden Sie die Translokationsmatrix in Einschlussnotation
So ermitteln Sie den Koeffizienten der ungefähren Kurve, die in Python durch die Scheitelpunkte verläuft
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
So ermitteln Sie die Anzahl der Stellen in Python
Kennen Sie den Speicherort der Python-Klassendefinitionsdatei.
[Python] Ruft die Liste der im Modul definierten Klassen ab
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Suchen Sie den Teil 575 aus Wikipedia in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Den Inhalt der Daten in Python nicht kennen
Finden Sie die Hermite-Matrix und ihre eindeutigen Werte in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Verwenden wir die offenen Daten von "Mamebus" in Python
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Heap Sort Edition)
[Python] Gibt alle Kombinationen von Elementen in der Liste aus
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 5 von Hajipata in Python
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Objektäquivalenzbeurteilung in Python
Implementierung der schnellen Sortierung in Python
Über die Funktionen von Python
Lassen Sie uns das Umfangsverhältnis mit Python finden
Die Kraft der Pandas: Python
Finden Sie den Maximalwert Python (verbessert)
Ich habe Python verwendet, um mich über die Rollenauswahl der 51 "Yachten" in der Welt zu informieren.
Ich habe versucht, die Entropie des Bildes mit Python zu finden