RE: Those Pesky Minus Signs
- To: mathgroup at smc.vnet.net
- Subject: [mg43352] RE: Those Pesky Minus Signs
- From: "David Park" <djmp at earthlink.net>
- Date: Tue, 26 Aug 2003 07:13:26 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi Ted, There was an error in the first MakeBoxes statement: "(" instead of "[". So I think it should have been: MakeBoxes[a_*b : Plus[_?Negative*_, (_?Negative*_) ..], form : (StandardForm | TraditionalForm)] := RowBox[{MakeBoxes @@ {-a, form}, RowBox[{"(", MakeBoxes @@ {-b, form}, ")"}]}] MakeBoxes[p_Rational?Negative, form : (StandardForm | TraditionalForm) ] := FractionBox[ MakeBoxes @@ {Numerator[p], form}, MakeBoxes @@ {Denominator[p], form} ] But what about -(a + b + c) or (-1/2)(a - b - c) Actually, I think this is not a simple question because the user will often have various desires about which term in the sum he wants to be positive and which factors he wants taken out. There is a similar problem in lists and arrays. Sin[x]*E^y*{{1, 1}, {-1, 1}} {{E^y*Sin[x], E^y*Sin[x]}, {(-E^y)*Sin[x], E^y*Sin[x]}} leading to a lot of duplicated expressions. It would certainly be nice if Mathematica had a controlled factoring of expressions from sums and arrays. For sums it's the minus sign that is the problem and for arrays it is everything. Of course, without introducing HoldForm (if possible). David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Ersek, Ted R [mailto:ErsekTR at navair.navy.mil] To: mathgroup at smc.vnet.net David Park wanted to fix it so that (-1/2)(a+b+c) wouldn't return (1/2)(-a-b-c) I don't know why it works that way, but the following definitions will fix the problem. The second definition puts the minus sign in the numerator of a rational number. --------------------------- MakeBoxes(a_*b:Plus[_?Negative*_, (_?Negative*_)..], form:(StandardForm|TraditionalForm)]:= RowBox[{MakeBoxes@@{-a,form}, RowBox[{"(", MakeBoxes@@{-b, form}, ")"}] }] MakeBoxes[p_Rational?Negative, form:(StandardForm|TraditionalForm) ]:= FractionBox[ MakeBoxes@@{Numerator[p],form}, MakeBoxes@@{Denominator[p],form} ] ----------------------------- This fixes situations you didn't address. Now (-1/2)(a+2.3 b+c) returns itself. ---------------------------- Regards, Ted Ersek Get Mathematica tips, tricks from http://www.verbeia.com/mathematica/tips/Tricks.html