2016-10-17 113 views
1

嘗試用sympy求解四次多項式方程,我遇到了一些困難。我的代碼和公式我試圖解決:使用sympy的求解器對具有復係數的多項式(第4度)的誤差

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) 

輸出:

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) 

我真的不能做任何事情出來。我不太確定是什麼導致了這一點,我「測試」這個求解器以獲得更緊湊的多項式,並且運行良好。

+1

看起來像是SymPy中的一個bug。我爲此打開了[問題](https://github.com/sympy/sympy/issues/11745)。 – asmeurer

+0

@asmeurer,謝謝。你能提出任何解決方法嗎? – Ranc

回答

2

看起來您可以使用solve(expr2, k, rational=False)解決該問題。