it-swarm.com.de

Ich bekomme eine Fehlermeldung <RuntimeWarning: ungültiger Wert in sqrt> gefunden

Ich versuche eine quadratische Gleichung in Python auszuführen. Es gibt jedoch weiterhin einen Fehler "RuntimeWarning: ungültiger Wert in sqrt gefunden".

Hier ist mein Code:

import numpy as np



a = 0.75 + (1.25 - 0.75)*np.random.randn(10000)
print a
b = 8 + (12 - 8)*np.random.randn(10000)
print b
c = -12 + 2*np.random.randn(10000)
print c
x0 = (-b - np.sqrt(b**2 - (4*a*c)))/(2 * a)
print x0

Ihr Expertenvorschlag wird äußerst hilfreich sein. Danke im Voraus

5
Maroof G

Dies ist nicht zu 100% mit Python verbunden. Sie können die Quadratwurzel einer negativen Zahl nicht berechnen (wenn es sich um reelle Zahlen handelt).

Sie haben keine Vorkehrungen getroffen, wenn b**2 - (4*a*c) eine negative Zahl ist.

>>> import numpy as np
>>>
>>> np.sqrt(4)
2.0
>>> np.sqrt(-4)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan

Lassen Sie uns testen, ob Sie negative Werte haben:

>>> import numpy as np
>>> 
>>> a = 0.75 + (1.25 - 0.75) * np.random.randn(10000)
>>> b = 8 + (12 - 8) * np.random.randn(10000)
>>> c = -12 + 2 * np.random.randn(10000)
>>> 
>>> z = b ** 2 - (4 * a * c)
>>> print len([_ for _ in z if _ < 0])
71
10
DeepSpace

Wenn Sie komplexe Analysen durchführen möchten (mit imaginären Zahlen, wie von sqrt (-1) definiert), können Sie cmath importieren und cmath.sqrt (-1) anstelle von numpy.sqrt (-1) verwenden.

Wenn ich zum Beispiel den Brechungsindex von Materialien aus Permittivität und Permeabilität berechne (per Definition ist j beteiligt), schreibe ich Funktionen in Python als solche:

def n(f):
    y = cmath.sqrt(mu1f(f) - j*mu2f(f)) * (e1f(f) - j*e2f(f))
    return y.real

Wobei e1f usw. zuvor definierte Interpolationsfunktionen sind, die alle eine Funktion der Einfallsfrequenz f sind. Das y-Ergebnis ist in sich ein komplexer Wert, der komplexe Brechungsindex, aber ich interessiere mich oft nur für den realen Anteil (den Brechungsindex), also wird der zurückgegeben.

Hoffe das hilft

0
Michael Green