Versuchen, eine Polynomgleichung 4. Grades mit Sympy zu lösen, kam ich zu einigen Schwierigkeiten. Mein Code und die Gleichung ich versuche zu lösen:Fehler bei der Verwendung von Sympy Solver auf Polynomen mit komplexen Koeffizienten (4. Grad)
import sympy as sym
from sympy import I
sym.init_printing()
k = sym.Symbol('k')
t, sigma ,k0, L , V = sym.symbols('t, sigma, k0, L,V')
x4 = (-t**2 + 2*I * t/sigma**2 + 1/sigma**4)
x3 = (-2*I * t * k0/sigma**2 - 2*k0/sigma**4)
x2 = (L**2 + k0 **2/sigma **4 + t**2 * V - 2 * I * t * V/sigma**2 -V/sigma**4)
x1 = (2*I * V * k0/sigma**2 + 2*k0 * V/sigma **4)
x0 = (2*I*k0*t*V/sigma**2 - k0 **2 *V/sigma**4)
expr = x4 * k**4 + x3 * k**3 + x2 * k**2 + x1 * k + x0
expr2 = expr.subs({k0 :2 , sigma : .2 , L : 1, V:1})
sym.solvers.solve(expr2,k)
Ausgang:
Traceback (most recent call last):
File "<ipython-input-4-e1ce7d8c9531>", line 1, in <module>
sols = sym.solvers.solve(expr2,k)
File "/usr/local/lib/python2.7/dist-packages/sympy/solvers /solvers.py", line 1125, in solve
solution = nfloat(solution, exponent=False)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/function.py", line 2465, in nfloat
return type(expr)([nfloat(a, n, exponent) for a in expr])
File "/usr/local/lib/python2.7/dist-packages/sympy/core/function.py", line 2499, in nfloat
lambda x: isinstance(x, Function)))
File "/usr/local/lib/python2.7/dist-packages/sympy/core/basic.py", line 1087, in xreplace
value, _ = self._xreplace(rule)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/basic.py", line 1095, in _xreplace
return rule[self], True
File "/usr/local/lib/python2.7/dist-packages/sympy/core/rules.py", line 59, in __getitem__
return self._transform(key)
File "/usr/local/lib/python2.7/dist-packages/sympy/core/function.py", line 2498, in <lambda>
lambda x: x.func(*nfloat(x.args, n, exponent)),
File "/usr/local/lib/python2.7/dist-packages/sympy/core/function.py", line 2465, in nfloat
return type(expr)([nfloat(a, n, exponent) for a in expr])
File "/usr/local/lib/python2.7/dist-packages/sympy/core/function.py", line 2465, in nfloat
return type(expr)([nfloat(a, n, exponent) for a in expr])
TypeError: __new__() takes exactly 3 arguments (2 given)
Und ich kann wirklich nichts draus machen. Ich bin nicht so sicher, was das verursacht, ich habe diesen Löser für kompaktere Polynome "getestet" und es hat gut funktioniert.
Sieht aus wie ein Fehler in SymPy. Ich habe [ein Problem] (https://github.com/sympy/sympy/issues/11745) dafür geöffnet. – asmeurer
@asmeurer, danke. Könntest du mir irgendwelche Work-Arounds vorschlagen? – Ranc