Re: polynomial operations through CoefficientList

*To*: mathgroup at smc.vnet.net*Subject*: [mg44765] Re: [mg44729] polynomial operations through CoefficientList*From*: Daniel Lichtblau <danl at wolfram.com>*Date*: Tue, 25 Nov 2003 00:45:33 -0500 (EST)*References*: <200311240505.AAA09907@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Paolo Bientinesi wrote: > > Hello, > does anybody have 2 functions ready to multiply and add > 2 polynomials directly from their CoefficientList's? > > example: the polynomials I'm considering are > p1[x_] := 1 + k1 x - 2 k2 x^2 > p2[x_] := -2 -k3 x > > Given > cf1 = {1,k1,-2 k2} > and > cf2 = {-2,-k3} > > I would like to get the list > {-2,-2 k1-k3,4 k2-k1 k3,2 k2 k3} > for p1[x]*p2[x] > > and the list > {-1,k1-k3,-2 k2} > for p1[x]+p2[x] > > without performing operations like > > CoefficientList[ > cf1.Table[x^i,{i,0,Length[cf1]-1}]* > cf2.Table[x^i,{i,0,Length[cf2]-1}], x] > > Thanks! > -- > Paolo > > pauldj at cs.utexas.edu paolo.bientinesi at iit.cnr.it The code below will do this. truncateRight[c1_] := Module[{len=Length[c1]}, While[c1[[len]]===0, len--]; Take[c1,len]] coefficientListPlus[c1_,c2_] := With[{len=Max[Length[c1],Length[c2]]}, truncateRight[PadRight[cf1,len] + PadRight[cf2,len]]] coefficientListTimes[c1_,c2_] := ListConvolve[c1, c2, {1,-1}, 0] For your example: p1[x_] := 1 + k1*x - 2*k2*x^2 p2[x_] := -2 -k3*x cf1 = CoefficientList[p1[x], x]; cf2 = CoefficientList[p2[x], x]; In[24]:= InputForm[coefficientListPlus[cf1,cf2]] Out[24]//InputForm= {-1, k1 - k3, -2*k2} In[25]:= InputForm[coefficientListTimes[cf1,cf2]] Out[25]//InputForm= {-2, -2*k1 - k3, 4*k2 - k1*k3, 2*k2*k3} For the special case where one works with univariate polynomials with coefficients in a prime field there is more efficient code for multiplication (though it does not much matter if the degree tends to be low). Daniel Lichtblau Wolfram Research

**References**:**polynomial operations through CoefficientList***From:*Paolo Bientinesi <pauldj@cs.utexas.edu>