Re: Constant term in polynomial?
- To: mathgroup at smc.vnet.net
- Subject: [mg3367] Re: Constant term in polynomial?
- From: wagner at bullwinkle.cs.Colorado.EDU (Dave Wagner)
- Date: Sat, 2 Mar 1996 04:13:17 -0500
- Organization: University of Colorado, Boulder
- Sender: owner-wri-mathgroup at wolfram.com
In article <4gro41$1d6 at dragonfly.wolfram.com>,
Ronald Bruck <bruck at pacificnet.net> wrote:
>In article <4gmhdc$gmv at dragonfly.wolfram.com>, bruck at mtha.usc.edu (Ronald
>Bruck) wrote:
>
>:Arrgh, I feel stupid asking this question, but I can't think how to do it:
>:how do I find the constant term in a polynomial in several variables in
>:Mathematica? For example, the "7" in 7 + 3 x y + y^2 ?
>
>... So I ended up implementing
>it as follows:
>
>ConstantCoefficient[poly_] := Module[{c},
> If[Head[poly] === Plus,
> c = First[poly];
> If[Variables[c] == {}, Return[c], Return[0]],
> (* else head != plus *)
> If[Variables[poly] == {}, Return[poly], Return[0]]
> ]
>]
Why don't you use the pattern matcher to check for the head Plus?
ConstantCoefficient[poly_Plus] :=
With[{c = First[poly]}, If[NumberQ[N[c]], c, 0]]
>This won't recognize E + x as having constant term E, but fortunately my
>polynomials all have rational coefficients.
The method given above works for E+x. It won't work for E + 1 + x,
however. But the following does:
ConstantCoefficient[poly_Plus] :=
Select[poly, NumberQ[N[#]]&]
Select works on expressions wtih any head, not just list.
What should happen here is that the level-1 parts of the Plus that
are numeric will be returned, _wrapped_in_Plus_:
In[3]:=
ConstantCoefficient[E^2 + Pi + Sqrt[7]x + Sqrt[5]]
Out[3]=
2
Sqrt[5] + E + Pi
>Someone e-mailed me a suggestion to use poly /. x_^e_ -> 0. This almost
>works (it doesn't recognize the x in 7 + x as a power of x); it does
>seem rather dangerous to apply the rule x_ -> 0!
Indeed, the polynomial I used as an example above will break this technique.
Dave Wagner
Principia Consulting
(303) 786-8371
dbwagner at princon.com
http://www.princon.com/princon
==== [MESSAGE SEPARATOR] ====