MathGroup Archive 1995

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Recombining CoefficientList

  • Subject: [mg2565] Re: [mg2531] Re: [mg2501] Recombining CoefficientList
  • From: roberto at cce.ufes.br (Roberto Colistete Junior)
  • Date: Tue, 21 Nov 1995 09:24:17 -0500
  • Approved: usenet@wri.com
  • Distribution: local
  • Newsgroups: wri.mathgroup
  • Organization: Wolfram Research, Inc.

> 
> Here is a slight modification of tmj  5.3 p24 (In[] and Out[])
> 
> ToPolynomial[cl_, vars_] :=
>    Plus@@Flatten[
>    	MapIndexed[#1 Times@@(vars^(#2-1))&,cl,{Depth[cl]-1}]
>    ]
> 
> Example:
> 
> poly = a x^3 + b x^4 y + c x y + d y^2 + e
> 
>           3              4        2
>    e + a x  + c x y + b x  y + d y
> 
> cl = CoefficientList[poly, {x,y}]
> 
>    {{e, 0, d}, {0, c, 0}, {}, {a, 0, 0}, {0, b, 0}}
> 
> ToPolynomial[cl, {x,y}]
> 
>           3              4        2
>    e + a x  + c x y + b x  y + d y
> 
> 
> Allan Hayes
> hay at haystack.demon.co.uk
> 
> 
> 

There is a subtle bug in ToPolynomial, which can be seen easily, adding an 
exponent to e :

poly = a x^3 + b x^4 y + c x y + d y^2 + e^2

    2      3              4        2
   e  + a x  + c x y + b x  y + d y

cl = CoefficientList[poly, {x,y}]

      2
   {{e , 0, d}, {0, c, 0}, {}, {a, 0, 0}, {0, b, 0}}

ToPolynomial[cl, {x,y}]

   Thread::tdlen: Objects of unequal length in {x, y} cannot be
   combined.
   Thread::tdlen: Objects of unequal length in {x, y} {0, 0, 0} cannot be 
   combined.
   Thread::tdlen: Objects of unequal length in e {x, y} {0, 0, 0} cannot be 
   combined.
   General::stop: Further output of Thread::tdlen
        will be suppressed during this calculation.


The problem is that {Depth[coef] - 1} works fine just to coefficients 
with depth equal to one. Here is a solution :

ToPolynomial2[cl_, vars_] := 
    Plus@@Flatten[
        MapIndexed[#1 Times@@(vars^(#2 - 1))&, cl, {Length[vars]}]
    ]


To allow the form ToPolynomial[cl, x], with x not being a list, this is a 
extended version :

ToPolynomial3[cl_, vars_] :=
    Plus@@Flatten[
        MapIndexed[#1 Times@@(vars^(#2 - 1))&, cl, 
                   {If[Head[vars] === List, Length[vars], 1]}
        ]
    ]


Repeating the example with poly :

ToPolynomial2[cl, {x,y}]

     2      3              4        2
    e  + a x  + c x y + b x  y + d y

ToPolynomial3[cl, {x,y}]

     2      3              4        2
    e  + a x  + c x y + b x  y + d y







  • Prev by Date: large linear systems
  • Next by Date: Re: Inverse of a Number
  • Previous by thread: Re: Recombining CoefficientList
  • Next by thread: Re: Re: Recombining CoefficientList