subs - Maple Programming Help

subs

substitute subexpressions into an expression

 Calling Sequence subs(x=a,expr) subs(s1,...,sn,expr) subs[eval](x=a,expr) subs[eval](s1,...,sn,expr) subs[inplace](x=a,expr) subs[inplace](s1,...,sn,expr)

Parameters

 x - expression a - expression expr - expression s1, ..., sn - equations, or sets or lists of equations

Description

 • The first form of the subs command substitutes a for x in the expression expr. Note that this command is similar to the eval command. Simple applications of replacing a symbol by a value in a formula should normally be done with the eval command. Differences between the two commands are highlighted in the examples later.
 • The second general form of the subs command makes the substitutions specified by first arguments in the last argument expr. Each of s1, ..., sn must be an equation or a list or set of equations. The substitutions are performed sequentially starting with s1. The substitutions within a set or list are performed simultaneously; if there are multiple substitutions on the same name, the first one is used.
 • Every occurrence of the left-hand side of a substitution equation that appears in expr is replaced by the right-hand side of the equation. Note that only subexpressions in expr that correspond to operands (ops) of a Maple object are matched.  This is termed "syntactic substitution".  A more powerful substitution is available using the algsubs command.
 • The inplace option only applies when substituting into an rtable (such as Array, Matrix, or Vector) with no indexing function. When inplace is specified, the input rtable is updated in-place.  The result is the updated original expr rtable, rather than a copy.
 • The action of substitution is not followed by evaluation by default. There are two ways of achieving a full evaluation:
 – The eval command also performs a full evaluation but takes care to delay substitutions which are not mathematically safe, as shown in the examples later.
 – The eval option to subs performs a full evaluation while keeping the semantics the same as for subs. This option should be used with care.
 • The options eval and inplace can be given together in the index as an expression sequence, and they can be specified in either order.

 • The subs command is thread-safe as of Maple 15.

Examples

Examples showing simple substitution of the form x=a for an expression expr.

 > $\mathrm{subs}\left(x=2,{x}^{2}+x+1\right)$
 ${7}$ (1)
 > $\mathrm{subs}\left(x={r}^{\frac{1}{3}},3x\mathrm{ln}\left({x}^{3}\right)\right)$
 ${3}{}{{r}}^{{1}{/}{3}}{}{\mathrm{ln}}{}\left({r}\right)$ (2)
 > $\mathrm{subs}\left(\mathrm{sin}\left(x\right)=y,\frac{\mathrm{sin}\left(x\right)}{\sqrt{1-\mathrm{sin}\left(x\right)}}\right)$
 $\frac{{y}}{\sqrt{{1}{-}{y}}}$ (3)

The following examples show the difference between subs and algsubs, where the algsubs command substitutes subexpressions into an expression.

 > $\mathrm{subs}\left(a+b=y,{\left(a+b+c\right)}^{2}\right)$
 ${\left({a}{+}{b}{+}{c}\right)}^{{2}}$ (4)
 > $\mathrm{algsubs}\left(a+b=y,{\left(a+b+c\right)}^{2}\right)$
 ${\left({y}{+}{c}\right)}^{{2}}$ (5)
 > $\mathrm{subs}\left({a}^{2}=y,{a}^{3}\right)$
 ${{a}}^{{3}}$ (6)
 > $\mathrm{algsubs}\left({a}^{2}=y,{a}^{3}\right)$
 ${y}{}{a}$ (7)

The substitutions within a set or a list are performed simultaneously.

 > $\mathrm{subs}\left(\left\{x=y,y=x\right\},\left[x,y\right]\right)$
 $\left[{y}{,}{x}\right]$ (8)
 > $\mathrm{subs}\left(\left[x=y,y=x\right],\left[x,y\right]\right)$
 $\left[{y}{,}{x}\right]$ (9)

When the substitutions are in a sequence, they are applied one at a time, akin to the following:

 > $\mathrm{subs}\left(x=y,y=x,\left[x,y\right]\right)$
 $\left[{x}{,}{x}\right]$ (10)
 > $\mathrm{subs}\left(x=y,\left[x,y\right]\right)$
 $\left[{y}{,}{y}\right]$ (11)
 > $\mathrm{subs}\left(y=x,\right)$
 $\left[{x}{,}{x}\right]$ (12)

If there are multiple substitutions on the same name, the first one is used.

 > $\mathrm{subs}\left(x=0,x=2,{ⅇ}^{x}\right)$
 ${{ⅇ}}^{{0}}$ (13)
 > $\mathrm{simplify}\left(\right)$
 ${1}$ (14)

As shown in the following example, evaluation does not follow substitution by default.

 > $\mathrm{subs}\left(y=0,\mathrm{sin}\left(y\right)\right)$
 ${\mathrm{sin}}{}\left({0}\right)$ (15)

The option eval for subs can be used to perform a full evaluation while not altering the semantics for subs.

 > $\mathrm{subs}[\mathrm{eval}]\left(y=0,\mathrm{sin}\left(y\right)\right)$
 ${0}$ (16)

Alternatively, you can use the eval command:

 > $\genfrac{}{}{0}{}{\mathrm{sin}\left(y\right)}{\phantom{y=0}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}|\phantom{\rule[-0.0ex]{0.1em}{0.0ex}}\genfrac{}{}{0}{}{\phantom{\mathrm{sin}\left(y\right)}}{y=0}$
 ${0}$ (17)

The following calls to subs and subs[eval] will return an error since Maple does simultaneous substitution in all parameters. (However, eval will work correctly.)

 > $p≔\mathrm{piecewise}\left(x=0,1,\frac{\mathrm{sin}\left(x\right)}{x}\right)$
 ${p}{:=}{{}\begin{array}{cc}{1}& {x}{=}{0}\\ \frac{{\mathrm{sin}}{}\left({x}\right)}{{x}}& {\mathrm{otherwise}}\end{array}$ (18)
 > $\mathrm{subs}\left(x=0,p\right)$
 > $\mathrm{subs}[\mathrm{eval}]\left(x=0,p\right)$
 > $\genfrac{}{}{0}{}{p}{\phantom{x=0}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}|\phantom{\rule[-0.0ex]{0.1em}{0.0ex}}\genfrac{}{}{0}{}{\phantom{p}}{x=0}$
 ${1}$ (19)

Here is an example where subs[eval] is more effective than eval (since eval sometimes delays substitutions which involve dummy variables):

 > $\genfrac{}{}{0}{}{{∫}s\left|f\left(x\right)\right|\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}x}{\phantom{s=\mathrm{signum}\left(f\left(x\right)\right)}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}|\phantom{\rule[-0.0ex]{0.1em}{0.0ex}}\genfrac{}{}{0}{}{\phantom{{∫}s\left|f\left(x\right)\right|\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}x}}{s=\mathrm{signum}\left(f\left(x\right)\right)}$
 $\genfrac{}{}{0}{}{{∫}{s}{}\left|{f}{}\left({x}\right)\right|\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{x}}{\phantom{{s}{=}{\mathrm{signum}}{}\left({f}{}\left({x}\right)\right)}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{|}\phantom{\rule[-0.0ex]{0.1em}{0.0ex}}\genfrac{}{}{0}{}{\phantom{{∫}{s}{}\left|{f}{}\left({x}\right)\right|\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{x}}}{{s}{=}{\mathrm{signum}}{}\left({f}{}\left({x}\right)\right)}$ (20)
 > $\mathrm{subs}[\mathrm{eval}]\left(s=\mathrm{signum}\left(f\left(x\right)\right),{∫}s\left|f\left(x\right)\right|\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}x\right)$
 ${∫}{\mathrm{signum}}{}\left({f}{}\left({x}\right)\right){}\left|{f}{}\left({x}\right)\right|\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{x}$ (21)

Compatibility

 • The subs command was updated in Maple 2015.
 • The eval option was introduced in Maple 2015.