python - 使用 sympy 求解具有复系数的多项式

标签 python numpy math sympy polynomials

我是 python 的新手,所以请原谅我是否有一个简单的修复方法。我正在尝试使用 sympy 求解具有复数系数的多项式。我发现如果 k ‘太复杂’,我会得到一个空白输出……我还不太确定如何定义这意味着什么。作为第一个例子,考虑这个具有复系数的四阶多项式,

In [424]: solve(k**4+ 2*I,k)
Out[424]: 
[-2**(1/4)*sqrt(-sqrt(2)/4 + 1/2) - 2**(1/4)*I*sqrt(sqrt(2)/4 + 1/2),
 2**(1/4)*sqrt(-sqrt(2)/4 + 1/2) + 2**(1/4)*I*sqrt(sqrt(2)/4 + 1/2),
 -2**(1/4)*sqrt(sqrt(2)/4 + 1/2) + 2**(1/4)*I*sqrt(-sqrt(2)/4 + 1/2),
 2**(1/4)*sqrt(sqrt(2)/4 + 1/2) - 2**(1/4)*I*sqrt(-sqrt(2)/4 + 1/2)]

获取输出没有问题。不过,我有兴趣解决类似的问题,

In [427]: solve(k**6 + 3*I*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1,k)
Out[427]: []

这要复杂得多,并返回一个空列表。但是,例如,我可以使用枫木来解决这个问题。另外,请注意,在删除复数系数时,没有问题,

In [434]: solve(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1,k)
Out[434]: 
[CRootOf(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1, 0),
 CRootOf(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1, 1),
 CRootOf(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1, 2),
 CRootOf(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1, 3),
 CRootOf(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1, 4),
 CRootOf(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1, 5)]

结果数组的元素可以用数字计算。

那么,这是一个与复系数有关的问题吗?我怎样才能像在线 [427] 那样解方程?

我曾尝试使用 nsolve() 求解并逐根分解,尽管我也没有成功使用这种方法。

最佳答案

根据 commentStelios , 你可以使用 sympy.polys.polytools.nroots :

>>> from sympy import solve, nroots, I
>>> from sympy.abc import k
>>> solve(k**6 + 3*I*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1,k)
[]
>>> nroots(k**6 + 3*I*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1)
[-2.05972684672 - 0.930178254620881*I, -0.0901851681681614 + 0.433818575087712*I, -0.0734840785305346 - 0.434217215694685*I, 0.60726931721974 - 0.0485101438937812*I, 0.745127208196241 + 0.945593905069312*I, 0.870999568002712 - 2.96650686594768*I]

关于python - 使用 sympy 求解具有复系数的多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39254827/

相关文章:

python - 为什么在 IDLE 中运行此脚本时没有收到错误?

python - 按索引对数组子集的标准差进行多次计算

Python - if True :? 有什么用

Python 服务发现 : Advertise a service across a local network

python - Scipy:最大化插值曲线之间的距离

java - 从 ArrayList 获取随机数?

c - FFT无法重新组合结果?

iphone - 游戏中的数学逻辑(基本三角函数),这段代码在做什么?

python - 在 Python 中将列表转换为字典

Python 快速余弦距离与 cython