Dear Kalevi,
First of thanks a lot for the great instructions. It is a good step
forward. I applied your code as:
from itertools import product
from sympy import IndexedBase, symbols, Poly
d=3
l=4
indices = [i for i in product(range(l), repeat=d) if sum(i) < l]
a = IndexedBase('a')
coeffs = {i: a[i] for i in indices}
vars = symbols('x:3')
Poly(coeffs, *vars)
However there are a couple of issues:
- ` if sum(i) < l ` causes the total degree of each monomial to be less
than 4, that's not what I want. I want to take a list or ndarray of
non-negative integers D=[d1,...,dm] and each monomial should have a degree
of i_j for x_j which is less than d_j , so not the total degree of each
monomial but the degree of each variable is important. is there any way to
tell `itertools.product` to give the Cartesian product of a list of ranges.
something like itertools.product(range(d1),...,range(dm)).
- in the second line from bottom how can I change the `3` with a
variable?
Thanks for your help again.
Best,
Foad
On Wed, Aug 1, 2018 at 3:10 PM Kalevi Suominen <[email protected]> wrote:
> I would first generate the list of monomial indices by using e.g.
> itertool.product, then create a dictionary containing the indexed
> coefficients, and finally create a Poly object with given variables from
> those coefficients. For example, to construct a polynomial of degree 3 or
> less in 3 variables this could be done:
>
> indices = [i for i in itertools.product(range(4), repeat=3) if sum(i) < 4]
> a = IndexBase('a')
> coeffs = {i: a[i] for i in indices}
> vars = symbols('x:3')
> Poly(coeffs, *vars)
>
> Kalevi Suominen
>
> On Wednesday, August 1, 2018 at 2:01:13 PM UTC+3, foadsf wrote:
>>
>> I want to use power series to approximate some PDEs. The first step I
>> need to generate symbolic multivariate polynomials, given a numpy ndarray.
>>
>> Consider the polynomial below:
>>
>> <https://i.stack.imgur.com/eBQVK.png>
>>
>>
>> I want to take a m dimensional ndarray of D=[d1,...,dm] where djs are
>> non-negative integers, and generate a symbolic multivariate polynomial in
>> the form of symbolic expression. The symbolic expression consists of
>> monomials of the form:
>>
>> <https://i.stack.imgur.com/pvDDT.png>
>>
>>
>> Fo example if D=[2,3] the output should be
>>
>> <https://i.stack.imgur.com/nDhGD.png>
>>
>>
>> For this specific case I could nest two for loops and add the
>> expressions. But I don't know what to do for Ds with arbitrary length.
>> If I could generate the D dimensional ndarrays of A and X without using
>> for loops, then I could use np.sum(np.multiply(A,X)) as Frobenius inner
>> product <https://en.wikipedia.org/wiki/Frobenius_inner_product> to get
>> what I need.
>>
>> I would appreciate if you could help me know how to do this in SymPy.
>> Thanks in advance.
>>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sympy.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/1c70ac48-9c09-43b5-9374-15acb37d2860%40googlegroups.com
> <https://groups.google.com/d/msgid/sympy/1c70ac48-9c09-43b5-9374-15acb37d2860%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/CADjqfdpggcnHA%3DWAZwPuo9ognPNKOm2qDViug46682GS-h7x6g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.