Mathematica [Mathematica] Formatting output of polynomials

AI Thread Summary
Formatting polynomials in Mathematica can be challenging, especially when aiming for a specific output style. The user seeks to display a polynomial in a standard form with parentheses around each term, rather than the default output. A proposed solution involves using a custom function, `polyForm`, which utilizes `CoefficientRules` to extract coefficients and format them accordingly. This function successfully displays the polynomial in the desired format, although it is primarily for visual representation and does not retain the structure for further calculations. The discussion emphasizes the importance of clear polynomial representation for understanding geometric interpretations.
jackmell
Messages
1,806
Reaction score
54
Hi guys,

I seem to still be having problems formatting polynomials in a standard way in Mathematica. I generate them randomly and would like them output using Print in a particular format. Say I have:

theFunction=-2 + w^3 (-9 - 3 z) - 7 z + w^2 (4 + 5 z) + w (8 - 2 z^2) +
w^4 (-5 z^2 - 5 z^3)

I can for example use TraditionalForm to get:

w^4 \left(-5 z^3-5 z^2\right)+w^3 (-3 z-9)+w^2 (5 z+4)+w \left(8-2 z^2\right)-7 z-2

but that's really not the way I want it. I'd like to output it in the form:

(-2-7z)+(8-2z^2)w+(4+5z)w^2+(-9-3z)w^3+(-5z^2-5z^3)w^4

with the parenthesis. I've tried CoefficientList to get the coefficients directly and then put the polynomial back together the way I want it but Mathematica changes it and doesn't keep the parenthesis around the w^0 term and will also place the w^n term first in some of the terms. Here's the code I'm using to generate the polynomials:

Code:
degree = 5;
bitsize = 5;
thenumber = 
  IntegerDigits[RandomInteger[{1, 2^(bitsize (degree + 1))}], 2, 
   bitsize (degree + 1)];
orderTable = Table[0, {degree + 1}];
mylist = Table[
   aseq = Take[thenumber, {bitsize (n - 1) + 1, bitsize n}];
   atemp = Table[If[aseq[[j]] != 0,
      RandomInteger[{-9, 9}] Power[z, j - 1], "A"], {j, 1, bitsize}];
   Subscript[a, n - 1] = Plus @@ DeleteCases[atemp, _String]
   , {n, 1, degree + 1}];

theFunction = Plus @@ Table[Subscript[a, n] w^n, {n, 0, degree}]
TraditionalForm[theFunction]

You guys have any ideas how to change it so that I can Print the output in the form I described above?
Thanks,
Jack
 
Last edited:
Physics news on Phys.org
Here's a quick hack

Code:
polyForm[poly_, var_] := 
 Module[{coeffs = CoefficientRules[poly, var] // Sort},
  Interpretation[Row[Table[Row[{"(", coeff[[2]], ")", w^coeff[[1, 1]] /. 1 -> ""}], 
                                     {coeff, coeffs}], "+"], poly]]

Then

Code:
theFunction = -2 + w^3 (-9 - 3 z) - 7 z + w^2 (4 + 5 z) + 
                              w (8 - 2 z^2) + w^4 (-5 z^2 - 5 z^3);

polyForm[theFunction, w]
(-2 - 7 z) + (8 - 2 z^2) w + (4 + 5 z) w^2 + (-9 - 3 z) w^3 + (-5 z^2 - 5 z^3) w^4

It's only really for displaying the polynomial, since the `Interpretation` thing only works for cutting and pasting (that is `t = polyForm[poly, var]` does not work). If you worked at a lower level with `InterpretationBox` then you could get it working more smoothly.
 
Last edited:
Ok. That works fine. I only want it for displaying. The reason is so that I can easily relate the algebra to the geometry whereas when it's not in that easy-to-recognize form sometimes I mis-interpret the geometry based on the algebra only to realize after some work that I didn't notice a term.

Thanks!
 

Similar threads

Replies
8
Views
2K
Replies
7
Views
2K
Replies
1
Views
2K
Replies
10
Views
2K
Replies
6
Views
3K
Replies
5
Views
4K
Replies
2
Views
2K
Replies
2
Views
2K
Back
Top