jump to navigation

Quick Mathematica squib August 14, 2012

Posted by David Speyer in Uncategorized.

I have spent a lot of time manipulating multivariate polynomials in Mathematica, and have been very frustrated at trying to make Coefficient behave the way I think it should. I think Coefficient[2x+3xy, x] should be 2, Mathematica thinks it should be 2+3y. Or rather, I don’t think that this should be the default, but it is very often my desired behavior and I can’t find an option to tell Mathematica that’s what I want.

I just wrote a little snippet to do this for me, and I’m copying it here so I can reuse it in the future:

myCoeff[poly_, vars_, exp_] :=
     If[Max[exp] == 0, poly, Coefficient[poly, Apply[Times, vars^exp]]] /.
       Map[(# -> 0) &, vars]

For example, myCoeff[2 x + 3 x*y, {x, y}, {1, 0}] is 2, just as I want. Note that myCoeff[2k*x+2x*y, {x,y}, {1,0}] is 2k; so you can still easily have Mathematica treat some variables as constants.

UPDATE Code simplified a bit, because I realized that creating useless replacement rules wouldn’t do any harm.


1. Teake - August 14, 2012

It’s always frustrating if Mathematica behaves a bit different than expected. But couldn’t you use CoefficientList in this case?

2. David Speyer - August 15, 2012

Not really. I imagine you are thinking something like

(* I did not test this code *)

L = CoefficientList[poly, vars];

indexer=Sequence[Map[{#}&, exp+Table[1, {i,1,Length[expr]}]];

(* This messy formula describes where inside CoefficientList the term we want is, using the formula that Take[] wants for input. *)

First[Take[L, indexer]]

But this only works if exp is in the range of monomials which Mathematica uses to create CoefficientList. For example, myCoeff[x+2, {x}, {100}] won’t work with the above implementation. You could add a test for that; I don’t know if that would be better in some way.

3. Scott Morrison - August 15, 2012

Just like we have MathOverflow, users of Mathematica have http://mathematica.stackexchange.com/, which is pretty good for this sort of problem. Lots of eager users coming up with nice solutions, and it seems to work much better than the old Mathematica email lists.

4. David Speyer - August 15, 2012

Hi Scott! As it happens, I just started looking at mathematica.SE a few days ago; I’ve left 1 question and 2 answers so far. I tend to feel embarrassed to ask for ways to do basic things like this though.

Sorry comments are closed for this entry


Get every new post delivered to your Inbox.

Join 772 other followers

%d bloggers like this: