Ich verwende sympy ein Polynom zu lösen:Ignorieren imaginäre Wurzeln in sympy
x = Symbol('x')
y = solve(int(row["scaleA"])*x**3 + int(row["scaleB"])*x**2 + int(row["scaleC"])*x + int(row["scaleD"]), x)
y eine Liste möglicher Lösungen ist. Ich muss jedoch die imaginären ignorieren und nur die echten Lösungen verwenden. Außerdem hätte ich gerne die Lösung als Wert, nicht als Ausdruck. Im Moment sieht es so aus:
[-2/3 - 55**(1/3)*(-1/2 - sqrt(3)*I/2)/3, -2/3 - 55**(1/3)*(-1/2 + sqrt(3)*I/2)/3, -55**(1/3)/3 - 2/3]
Ich brauche den Wert des letzten Ausdrucks (-2.22756). Gibt es Funktionen, die das vereinfachen?
SymPy ist höchstwahrscheinlich nicht die richtige Bibliothek, wenn Sie nur an der Float/Double-Approximation der Wurzel interessiert sind. Wenn Sie numpy/scipy verwenden, erhalten Sie wahrscheinlich bessere Leistung und einfacheren Code. Und wenn Sie sympy über numpy/scipy wählen, weil es kleiner ist, können Sie mit mpmath, das innerhalb von sympy für Numerik verwendet wird, beliebig kleiner werden (mit beliebiger Genauigkeit, die nicht durch die Maschine begrenzt wird) – Krastanov