7

Is there a way, or if not, how could one define a function which takes an equation in any form (for example as given by FullSimplify):

$$(A+X_0) x+By=3x$$

and rearranges it in the more compact and tidy form:

$$(A+X_0-3) x+By=0$$

usumdelphini
  • 996
  • 4
  • 14

1 Answers1

14
ClearAll[a, b, c, d, x, y]
expr = a x + b y + c x == d x;

You can use any of

Collect[(expr /. Equal -> Subtract) == 0, x]
Collect[Subtract @@ expr == 0, x]
FullSimplify[(expr /. Equal -> Subtract) ] == 0 
FullSimplify[Subtract @@ expr] == 0

to get

(* (a + c - d) x + b y == 0 *)

Alternatively, use a custom ComplexityFunction that makes non-zero expressions on the right-hand-side of == more expensive:

cf[e_] := 100 Count[e, Equal[_, Except[0, _]], {0, Infinity}] + LeafCount[e]
FullSimplify[expr, ComplexityFunction -> cf]
(* (a + c - d) x + b y == 0 *)

Update: In versions 11.3+, you can use the function SubtractSides:

FullSimplify /@ SubtractSides[expr]
 (a + c - d) x + b y == 0
kglr
  • 394,356
  • 18
  • 477
  • 896