Bercovici Adrian
Bercovici Adrian

Reputation: 9360

How to create symbol polynomial from given array with sympy?

I am trying to calculate some polynomials given an input numerator and denominator polynomials as coefficient arrays.

How can I create my polynomials from these arrays?

E.g:

Inputs:

den= [2,3,4]
num= [1,3]

Output: (s+3)/(s^2+3*s+4)

I need to use symbols because I will further need to divide the results by other polynomials and perform further polynomial computations.

P.S Is sympy suitable for this? I would usually solve things like this in matlab but I want to expand my knowledge.

Upvotes: 2

Views: 6297

Answers (3)

cards
cards

Reputation: 4975

Use the classmethod Poly.from_list. The terms of the list are the coefficients in descending order of a polynomial of degree equal to 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

Upvotes: 0

user6655984
user6655984

Reputation:

You can do the following:

den = [2, 3, 4]
num = [1, 3]
x = symbols('x')
Poly(num, x)/Poly(den, x)

This creates Poly objects for the numerator and denominator (not just expressions). The coefficients are listed from the highest power of x.

Note that the result of division is an ordinary expression, since there is no RationalFunction type in SymPy. If you want to apply the tools from the polys module to the numerator and denominator, keep them separate as a tuple.

Upvotes: 4

llllllllll
llllllllll

Reputation: 16404

I think what you want is (s+3)/(2*s^2+3*s+4), there is a typo in your original expression. And in Python, ^ is not power, power is **.

You just need a ordinary Python list comprehension:

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_

Upvotes: 2

Related Questions