calc: Rearranging with Selections

 
 11.1.5 Rearranging Formulas using Selections
 --------------------------------------------
 
 The ‘j R’ (‘calc-commute-right’) command moves the selected sub-formula
 to the right in its surrounding formula.  Generally the selection is one
 term of a sum or product; the sum or product is rearranged according to
 the commutative laws of algebra.
 
    As with ‘j '’ and ‘j <DEL>’, the term under the cursor is used if
 there is no selection in the current formula.  All commands described in
 this section share this property.  In this example, we place the cursor
 on the ‘a’ and type ‘j R’, then repeat.
 
      1:  a + b - c          1:  b + a - c          1:  b - c + a
 
 Note that in the final step above, the ‘a’ is switched with the ‘c’ but
 the signs are adjusted accordingly.  When moving terms of sums and
 products, ‘j R’ will never change the mathematical meaning of the
 formula.
 
    The selected term may also be an element of a vector or an argument
 of a function.  The term is exchanged with the one to its right.  In
 this case, the “meaning” of the vector or function may of course be
 drastically changed.
 
      1:  [a, b, c]          1:  [b, a, c]          1:  [b, c, a]
 
      1:  f(a, b, c)         1:  f(b, a, c)         1:  f(b, c, a)
 
    The ‘j L’ (‘calc-commute-left’) command is like ‘j R’ except that it
 swaps the selected term with the one to its left.
 
    With numeric prefix arguments, these commands move the selected term
 several steps at a time.  It is an error to try to move a term left or
 right past the end of its enclosing formula.  With numeric prefix
 arguments of zero, these commands move the selected term as far as
 possible in the given direction.
 
    The ‘j D’ (‘calc-sel-distribute’) command mixes the selected sum or
 product into the surrounding formula using the distributive law.  For
 example, in ‘a * (b - c)’ with the ‘b - c’ selected, the result is ‘a b
 - a c’.  This also distributes products or quotients into surrounding
 powers, and can also do transformations like ‘exp(a + b)’ to ‘exp(a)
 exp(b)’, where ‘a + b’ is the selected term, and ‘ln(a ^ b)’ to ‘ln(a)
 b’, where ‘a ^ b’ is the selected term.
 
    For multiple-term sums or products, ‘j D’ takes off one term at a
 time: ‘a * (b + c - d)’ goes to ‘a * (c - d) + a b’ with the ‘c - d’
 selected so that you can type ‘j D’ repeatedly to expand completely.
 The ‘j D’ command allows a numeric prefix argument which specifies the
 maximum number of times to expand at once; the default is one time only.
 
    The ‘j D’ command is implemented using rewrite rules.  See
 Selections with Rewrite Rules.  The rules are stored in the Calc
 variable ‘DistribRules’.  A convenient way to view these rules is to use
 ‘s e’ (‘calc-edit-variable’) which displays and edits the stored value
 of a variable.  Press ‘C-c C-c’ to return from editing mode; be careful
 not to make any actual changes or else you will affect the behavior of
 future ‘j D’ commands!
 
    To extend ‘j D’ to handle new cases, just edit ‘DistribRules’ as
 described above.  You can then use the ‘s p’ command to save this
 variable’s value permanently for future Calc sessions.  SeeOperations
 on Variables.
 
    The ‘j M’ (‘calc-sel-merge’) command is the complement of ‘j D’;
 given ‘a b - a c’ with either ‘a b’ or ‘a c’ selected, the result is ‘a
 * (b - c)’.  Once again, ‘j M’ can also merge calls to functions like
 ‘exp’ and ‘ln’; examine the variable ‘MergeRules’ to see all the
 relevant rules.
 
    The ‘j C’ (‘calc-sel-commute’) command swaps the arguments of the
 selected sum, product, or equation.  It always behaves as if ‘j b’ mode
 were in effect, i.e., the sum ‘a + b + c’ is treated as the nested sums
 ‘(a + b) + c’ by this command.  If you put the cursor on the first ‘+’,
 the result is ‘(b + a) + c’; if you put the cursor on the second ‘+’,
 the result is ‘c + (a + b)’ (which the default simplifications will
 rearrange to ‘(c + a) + b’).  The relevant rules are stored in the
 variable ‘CommuteRules’.
 
    You may need to turn default simplifications off (with the ‘m O’
 command) in order to get the full benefit of ‘j C’.  For example,
 commuting ‘a - b’ produces ‘-b + a’, but the default simplifications
 will “simplify” this right back to ‘a - b’ if you don’t turn them off.
 The same is true of some of the other manipulations described in this
 section.
 
    The ‘j N’ (‘calc-sel-negate’) command replaces the selected term with
 the negative of that term, then adjusts the surrounding formula in order
 to preserve the meaning.  For example, given ‘exp(a - b)’ where ‘a - b’
 is selected, the result is ‘1 / exp(b - a)’.  By contrast, selecting a
 term and using the regular ‘n’ (‘calc-change-sign’) command negates the
 term without adjusting the surroundings, thus changing the meaning of
 the formula as a whole.  The rules variable is ‘NegateRules’.
 
    The ‘j &’ (‘calc-sel-invert’) command is similar to ‘j N’ except it
 takes the reciprocal of the selected term.  For example, given ‘a -
 ln(b)’ with ‘b’ selected, the result is ‘a + ln(1/b)’.  The rules
 variable is ‘InvertRules’.
 
    The ‘j E’ (‘calc-sel-jump-equals’) command moves the selected term
 from one side of an equation to the other.  Given ‘a + b = c + d’ with
 ‘c’ selected, the result is ‘a + b - c = d’.  This command also works if
 the selected term is part of a ‘*’, ‘/’, or ‘^’ formula.  The relevant
 rules variable is ‘JumpRules’.
 
    The ‘j I’ (‘calc-sel-isolate’) command isolates the selected term on
 its side of an equation.  It uses the ‘a S’ (‘calc-solve-for’) command
 to solve the equation, and the Hyperbolic flag affects it in the same
 way.  SeeSolving Equations.  When it applies, ‘j I’ is often easier
 to use than ‘j E’.  It understands more rules of algebra, and works for
 inequalities as well as equations.
 
    The ‘j *’ (‘calc-sel-mult-both-sides’) command prompts for a formula
 using algebraic entry, then multiplies both sides of the selected
 quotient or equation by that formula.  It performs the default algebraic
 simplifications before re-forming the quotient or equation.  You can
 suppress this simplification by providing a prefix argument: ‘C-u j *’.
 There is also a ‘j /’ (‘calc-sel-div-both-sides’) which is similar to ‘j
 *’ but dividing instead of multiplying by the factor you enter.
 
    If the selection is a quotient with numerator 1, then Calc’s default
 simplifications would normally cancel the new factors.  To prevent this,
 when the ‘j *’ command is used on a selection whose numerator is 1 or
 -1, the denominator is expanded at the top level using the distributive
 law (as if using the ‘C-u 1 a x’ command).  Suppose the formula on the
 stack is ‘1 / (a + 1)’ and you wish to multiplying the top and bottom by
 ‘a - 1’.  Calc’s default simplifications would normally change the
 result ‘(a - 1) /(a + 1) (a - 1)’ back to the original form by
 cancellation; when ‘j *’ is used, Calc expands the denominator to ‘a (a
 - 1) + a - 1’ to prevent this.
 
    If you wish the ‘j *’ command to completely expand the denominator of
 a quotient you can call it with a zero prefix: ‘C-u 0 j *’.  For
 example, if the formula on the stack is ‘1 / (sqrt(a) + 1)’, you may
 wish to eliminate the square root in the denominator by multiplying the
 top and bottom by ‘sqrt(a) - 1’.  If you did this simply by using a
 simple ‘j *’ command, you would get ‘(sqrt(a)-1)/ (sqrt(a) (sqrt(a) - 1)
 + sqrt(a) - 1)’.  Instead, you would probably want to use ‘C-u 0 j *’,
 which would expand the bottom and give you the desired result
 ‘(sqrt(a)-1)/(a-1)’.  More generally, if ‘j *’ is called with an
 argument of a positive integer N, then the denominator of the expression
 will be expanded N times (as if with the ‘C-u N a x’ command).
 
    If the selection is an inequality, ‘j *’ and ‘j /’ will accept any
 factor, but will warn unless they can prove the factor is either
 positive or negative.  (In the latter case the direction of the
 inequality will be switched appropriately.)  SeeDeclarations, for
 ways to inform Calc that a given variable is positive or negative.  If
 Calc can’t tell for sure what the sign of the factor will be, it will
 assume it is positive and display a warning message.
 
    For selections that are not quotients, equations, or inequalities,
 these commands pull out a multiplicative factor: They divide (or
 multiply) by the entered formula, simplify, then multiply (or divide)
 back by the formula.
 
    The ‘j +’ (‘calc-sel-add-both-sides’) and ‘j -’
 (‘calc-sel-sub-both-sides’) commands analogously add to or subtract from
 both sides of an equation or inequality.  For other types of selections,
 they extract an additive factor.  A numeric prefix argument suppresses
 simplification of the intermediate results.
 
    The ‘j U’ (‘calc-sel-unpack’) command replaces the selected function
 call with its argument.  For example, given ‘a + sin(x^2)’ with
 ‘sin(x^2)’ selected, the result is ‘a + x^2’.  (The ‘x^2’ will remain
 selected; if you wanted to change the ‘sin’ to ‘cos’, just press ‘C’ now
 to take the cosine of the selected part.)
 
    The ‘j v’ (‘calc-sel-evaluate’) command performs the basic
 simplifications on the selected sub-formula.  These simplifications
 would normally be done automatically on all results, but may have been
 partially inhibited by previous selection-related operations, or turned
 off altogether by the ‘m O’ command.  This command is just an
 auto-selecting version of the ‘a v’ command (SeeAlgebraic
 Manipulation).
 
    With a numeric prefix argument of 2, ‘C-u 2 j v’ applies the default
 algebraic simplifications to the selected sub-formula.  With a prefix
 argument of 3 or more, e.g., ‘C-u j v’ applies the ‘a e’
 (‘calc-simplify-extended’) command.  SeeSimplifying Formulas.  With
 a negative prefix argument it simplifies at the top level only, just as
 with ‘a v’.  Here the “top” level refers to the top level of the
 selected sub-formula.
 
    The ‘j "’ (‘calc-sel-expand-formula’) command is to ‘a "’ (See
 Algebraic Manipulation) what ‘j v’ is to ‘a v’.
 
    You can use the ‘j r’ (‘calc-rewrite-selection’) command to define
 other algebraic operations on sub-formulas.  SeeRewrite Rules.