Python - Wie berechnet man alle n-ten Wurzeln einer Zahl?

8

Ist es möglich, mit Hilfe von Python n komplexe Wurzeln einer gegebenen Zahl zu berechnen? Ich habe es kurz überprüft und es sieht so aus, als ob Python falsche / unvollständige Antworten gibt:

(-27.0j)**(1.0/3.0) erzeugt (2.598076211353316-1.4999999999999998j)

aber richtige Wurzeln sollten 3 komplexe Zahlen sein, weil jede Zahl ungleich null n verschiedene komplexe Zahl n Wurzeln hat. Ist es in Python möglich?

    
psihodelia 13.09.2011, 13:15
quelle

3 Antworten

6

Ich glaube nicht, dass Standard-Python dies tun wird, wenn Sie keine Funktion dafür schreiben, aber Sie können es mit Numpy tun:

Ссылка

    
Tom Zych 13.09.2011, 13:22
quelle
4

Es gibt viele mehrwertige komplexe Funktionen - Funktionen, die mehr als einen Wert haben können, der einem Punkt in ihrer Domäne entspricht. Zum Beispiel: Wurzeln, Logarithmen, inverse trigonometrische Funktionen ...

Der Grund, warum diese Funktionen mehrere Werte haben können, ist normalerweise, dass sie die Inverse einer Funktion sind, die mehrere Werte in der Domänenzuordnung auf denselben Wert hat.

Bei Berechnungen mit solchen Funktionen wäre es unpraktisch, immer alle möglichen Werte zurückzugeben. Für die inversen trigonometrischen Funktionen gibt es unendlich viele mögliche Werte.

Normalerweise können die verschiedenen Funktionswerte als eine Funktion eines ganzzahligen Parameters k ausgedrückt werden. Zum Beispiel sind die Werte von log z mit z = r*(cos t + i*sin t log r + i*(t + k*2*pi) mit k einer ganzen Zahl. Für die n-te Wurzel ist es r**(1/n)*exp(i*(t+k*2*pi)/n mit k=0..n-1 inklusive.

Da die Rückgabe aller möglichen Werte unpraktisch ist, geben mathematische Funktionen in Python und fast allen anderen gängigen Programmiersprachen den sogenannten "Hauptwert" der Funktion zurück. ( Referenz ) Der Hauptwert ist normalerweise der Funktionswert mit k = 0. Welche Wahl auch immer getroffen wird, sollte in der Dokumentation klar angegeben werden.

Um alle komplexen Wurzeln einer komplexen Zahl zu erhalten, evaluieren Sie einfach die Funktion für alle relevanten Werte von k:

%Vor%

(Sie müssen das cmath-Modul importieren, damit dies funktioniert.) Dies ergibt:

%Vor%     
Jeffrey Sax 14.09.2011 07:04
quelle
0

Wenn Sie alle Wurzeln auf sauberem Python bekommen wollen, können Sie eine einfache Funktion dafür erstellen:

%Vor%     
varela 13.09.2011 15:46
quelle

Tags und Links