Message Boards Message Boards

0
|
7845 Views
|
3 Replies
|
2 Total Likes
View groups...
Share
Share this post:

Remove the negative sign in front of a term while using FullSimplify?

Posted 8 years ago

When using 'FullSimplify' for fractions it often happens that Mathematica puts a negative sign '-' in front of the whole fraction. Is there any possibility to supress this and tell the Program to put the negative sign in the numerator?

Example: $- \frac{a-b}{c}$ is returned as $\frac{-a + b}{c}$

I know, its just cosmetics. Many thanks, Sebastian

POSTED BY: Seb Wi
3 Replies

Hi Sebastian,

I think it will be slightly tricky to work in the general case. The reason why it is returned like it does is the following:

-((a-b)/c);
%//FullForm
FullSimplify[%]//FullForm

Times[-1,Plus[a,Times[-1,b]],Power[c,-1]]
Times[Plus[Times[-1,a],b],Power[c,-1]]

As you can see, the second one is 'simpler' as the expression has less 'components'.

You can do the following: make your own ComplexityFunction that gives a large penalty for such an expression. Note that the default complexity function is:

SimplifyCount[p_] :=
 Which[Head[p] === Symbol, 1,
  IntegerQ[p], 
  If[p == 0, 1, Floor[N[Log[2, Abs[p]]/Log[2, 10]]] + If[p > 0, 1, 2]],
  Head[p] === Rational, 
  SimplifyCount[Numerator[p]] + SimplifyCount[Denominator[p]] + 1,
  Head[p] === Complex, 
  SimplifyCount[Re[p]] + SimplifyCount[Im[p]] + 1, NumberQ[p], 2,
  True, SimplifyCount[Head[p]] + 
   If[Length[p] == 0, 0, Plus @@ (SimplifyCount /@ (List @@ p))]]

Another option is to make your own simplification function:

ClearAll[MyFullSimplify]
MyFullSimplify[Times[a_?Negative,x__]]:=Times[a,FullSimplify[Times[x]]]
MyFullSimplify[x_]:=FullSimplify[x]

MyFullSimplify[-4 (-1+x)]
FullSimplify[-4 (-1+x)]

Which leaves the negative untouched:

-4 (-1+x)
4-4 x
POSTED BY: Sander Huisman

It's a bit of a chore to get Simplify to do this so I usually go for precise expression surgery to fix these minus sign problems, which are fairly common. In this case just use Minus on two parts of the expression.

(-a + b)/c
MapAt[Minus, %, {{1}, {2, 1}}]

giving

(-a + b)/c
-((a - b)/c)

The main problem is that you may have to "fish" for the positions. With some experience with Mathematica it gets easier to know what they are. Another drawback is that in a long expression you might inadvertently change the value of the expression.

This is a way:

(-a + b)/c /. (pl_Plus /; MatchQ[ToBoxes[pl],
     RowBox[{RowBox[{"-", _}], ___}]]) :>
  -DisplayForm@RowBox[{"(", -pl, ")"}]

if you can live with unnecessary parentheses.

POSTED BY: Gianluca Gorni
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract