Previous: Operating on Selections, Up: Selecting Subformulas

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.
See Operations 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. See Solving 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.) See Declarations,
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 (see Algebraic 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.
See Simplifying 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. See Rewrite Rules.