我正在尝试计算一些多项式,给定输入分子和分母多项式作为系数数组。
如何从这些数组创建多项式?
例:
输入:
den= [2,3,4]
num= [1,3]
输出:
(s+3)/(s^2+3*s+4)
我需要使用符号,因为我还需要将结果除以其他多项式并执行进一步的多项式计算。
P.S
sympy
适合这个吗?我通常会在matlab
中解决这样的事情,但我想扩展我的知识。
您可以执行以下操作:
den = [2, 3, 4]
num = [1, 3]
x = symbols('x')
Poly(num, x)/Poly(den, x)
这为分子和分母(不仅仅是表达式)创建了 Poly 对象。系数从 x 的最高次方开始列出。
注意除法的结果是一个普通的表达式,因为 SymPy 中没有 RationalFunction 类型。如果要将
polys
模块中的工具应用于分子和分母,请将它们作为元组分开。
我觉得你想要的是
(s+3)/(2*s^2+3*s+4)
,你的原文表达有误。而在Python中,^
不是power,power是**
.
你只需要一个普通的 Python 列表理解:
from sympy import poly
from sympy.abc import s
den_ = sum(co*s**i for i, co in enumerate(reversed(den)))
num_ = sum(co*s**i for i, co in enumerate(reversed(num)))
res = num_/den_
使用类方法
Poly.from_list
。列表的项是按降序排列的多项式的系数等于len(list)-1
from sympy import Symbol, Poly
# coefs
num= [1,3]
den= [2,3,4]
# symbol
s = Symbol('s')
# polynomial
n = Poly.from_list(num, x)
d = Poly.from_list(den, x)
# expression
e = n/d