I think I solved the second problem. From here <https://gist.github.com/celliern/c715151a247dbb3c8caec15aeb9af83d> I learned that if I change `symbols('x:3')` to `symbols(f'x1:{d+1}')` the second issue is solved.
On Wed, Aug 1, 2018 at 3:42 PM Foad Sojoodi Farimani <[email protected]> wrote: > 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/CADjqfdq60WG9d_3DzSsY7w%3DxqEU8QOTZYaOm%2BcUm293PoGbwjw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
