2016-10-17 4 views
1

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.

+1

Sieht aus wie ein Fehler in SymPy. Ich habe [ein Problem] (https://github.com/sympy/sympy/issues/11745) dafür geöffnet. – asmeurer

+0

@asmeurer, danke. Könntest du mir irgendwelche Work-Arounds vorschlagen? – Ranc

Antwort

2

Sie können das Problem umgehen, indem Sie solve(expr2, k, rational=False) verwenden.

Verwandte Themen