Re: Extracting terms of a multivariate polynomial order by order

*To*: mathgroup at smc.vnet.net*Subject*: [mg80299] Re: [mg80280] Extracting terms of a multivariate polynomial order by order*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Thu, 16 Aug 2007 07:28:06 -0400 (EDT)*References*: <200708160851.EAA23714@smc.vnet.net> <AC2665C6-B04E-42F9-A41A-B15ECAEC0AC9@mimuw.edu.pl>

A correction. There was a problem with copying and pasting in my posting. s = Normal[CoefficientArrays[p, {x, y, z}]]; should have been ls = Normal[CoefficientArrays[p, {x, y, z}]]; Andrzej Kozlowski On 16 Aug 2007, at 12:45, Andrzej Kozlowski wrote: > I think this is easier to do in Mathematica 6 than in 5.2, so, > although you are only asking about 5.2 I will start with 6. As an > example I will construct a polynomial in three variables x, y,z of > total degree 6, with coefficients a[i,j,k]. (The following code > only works in v. 6.) > > > > poly = Total[Array[a[#1 - 1, #2 - 1, #3 - 1]*x^(#1 - 1)*y^(#2 - 1) > *z^(#3 - 1) & , > {2, 3, 4}], 3] > > a[0, 0, 3]*z^3 + y*a[0, 1, 3]*z^3 + y^2*a[0, 2, 3]*z^3 + x*a[1, 0, > 3]*z^3 + > x*y*a[1, 1, 3]*z^3 + x*y^2*a[1, 2, 3]*z^3 + a[0, 0, 2]*z^2 + > y*a[0, 1, 2]*z^2 + > y^2*a[0, 2, 2]*z^2 + x*a[1, 0, 2]*z^2 + x*y*a[1, 1, 2]*z^2 + > x*y^2*a[1, 2, 2]*z^2 + > a[0, 0, 1]*z + y*a[0, 1, 1]*z + y^2*a[0, 2, 1]*z + x*a[1, 0, 1]*z + > x*y*a[1, 1, 1]*z + > x*y^2*a[1, 2, 1]*z + a[0, 0, 0] + y*a[0, 1, 0] + y^2*a[0, 2, 0] + > x*a[1, 0, 0] + > x*y*a[1, 1, 0] + x*y^2*a[1, 2, 0] > > In Mathematica 6.0 there is a very convenient function > CoefficientArrays which makes it possible to do what you want to do > (assuming I have understood you corrrectly) easily: > > s = Normal[CoefficientArrays[p, {x, y, z}]]; > > Now, for example, > > ls[[3]] > > {{0, a[1, 1, 0], a[1, 0, 1]}, {0, a[0, 2, 0], a[0, 1, 1]}, {0, 0, a > [0, 0, 2]}} > > gives you all the coefficients of terms of total degree 2 (note > that the coefficients always appear in arrays of full rank so > usually they will contain some 0s). > > In Mathematica 5.2 the most convenient function for this purpose is > undocumented and appears in the Internal context. The function name > is Internal`DistributedTermsList. In Mathematica 6 this function > appears in the GroebnerBasis` context so its name has to be changed > accordingly. > > terms = GroebnerBasis`DistributedTermsList[p, {x, y, z}] > > I have supressed the output but if you look at it you will > immediately understand what it does. Now, it is easy to use pattern > matching to extract coefficients of terms of any chosen total > degree, e.g. > > Cases[terms, {p_, l_} /; Total[p] == 4 -> l, Infinity] > {a(1, 2, 1), a(1, 1, 2), a(1, 0, 3), a(0, 2, 2), a(0, 1, 3)} > > gives all the coefficients of terms of total degree 4. > > Andrzej Kozlowski > > > > On 16 Aug 2007, at 10:51, Marcus P S wrote: > >> Hello, >> >> I have a multivariate polynomial (3 variables) from which I would >> like to extract terms order by order. More explicitly, I want all >> the >> lowest order terms, or all terms of the form >> >> c(L,M,N) x^L y^M z^N >> >> where L+M+N is smallest, and c(LMN) is some coefficient. If I have >> this, I can extract order by order, and taylor to which order I want >> to approximate my polynomial. >> >> I considered "Coefficients", but if I ask for the coefficients of >> the form x^2 z^2, it may return something like "1 + y", which is not >> what I want. Moreover, I have to explicitly request each possible >> term of a given order, which seems too mechanical/repetitive to be >> the >> "right way" to do things. The function for manipulating SeriesData >> objects are similarly limited. >> >> I am assuming that there is function in Mathematica (even 5.2) that >> will do this. Any suggestions would be greatly welcome. >> >> Thanks in advance. >> >> Marcus Silva >> >> >

**References**:**Extracting terms of a multivariate polynomial order by order***From:*Marcus P S <marcus.ps@gmail.com>