【发布时间】:2013-04-05 09:31:19
【问题描述】:
我正在尝试用 SymPy 象征性地求解具有复数及其共轭的多项式。我想我已经走了很长一段路,但solve 没有给我任何解决方案,尽管多项式是可解的。
from sympy import *
# set up symbols
a, b = symbols("a b", real=True)
t = a+I*b
T = functions.conjugate(t)
# set up polynomial
a1=0.005+I*0.0009
a2=0.9+I*-0.9
a3=0.4+I*0.5
a4=8+I*-80
a5=284+I*-1.5
a6=27100+I*-11500
poly=t**2 * T * a1 + t * T * a2 + t**2 * a3 + T * a4 + t * a5 + a6
# Trying to solve symbolically...
solve([re(poly), im(poly)], a, b)
# Output: []
# Solving numerically works, but only finds one solution...
nsolve((re(poly), im(poly)), (a, b), (0, 0))
# Output: matrix(
# [['-137.962596090596'],
# ['52.6296963395752']])
# verify with two solutions obtained in Maxima
poly.subs({a:-137.9625935162095, b:52.6296992481203}).n()
# Output: 0.000540354631040322 + 0.00054727003909351*I
poly.subs({a:-332.6474382554614+I*-185.9848818313149, b:258.0065640091016+I*-272.3344263478699}).n()
# Output: -6.55448222470652e-12 - 1.41238056784605e-12*I
有什么想法吗?
【问题讨论】:
-
这确实很奇怪。只是一个需要确定的问题:鉴于第一个替代后的值远非零,是否可能无法解决 poly 并且最大值为您提供了数值近似? (我不太了解最大值,所以我不太清楚它的行为)
-
@EnricoGiampieri 很可能是 Maxima 给了我一个数字近似值,但在它的输出中并没有提到它。我也不是 Maxima 专家 :-( 无论如何,如果 SymPy 能给出 Maxima 给出的解决方案就好了,即使它们只是数字近似值。
-
我尝试了一些处理这种方程,看起来问题出在 sympy 求解机制中,它不能很好地处理复数。我试图找出我们是否错过了使其工作所需的某些条件......
-
这在我看来不像一个多项式。多项式具有
a_0 z^0 + a_1 z^1 + ...类型的常数系数,您所拥有的是a_1 z^2 z*之类的项,即a1项乘以它的复数conj。如果你有一个来自 sympy 的多项式 mpmath 应该会很好用 docs.sympy.org/dev/modules/mpmath/calculus/polynomials.html -
SymPy 似乎无法解决这个问题,但即使它可以,它也不会为您提供 Maxima 的结果,因为您将
a和b设置为真实的,所以solve()只会给你a和b的真实值。
标签: python math polynomial-math sympy