@sym: subs (f, x, y) ¶@sym: subs (f, y) ¶@sym: subs (f) ¶Replace symbols in an expression with other expressions.
Example substituting a value for a variable:
syms x y f = x*y; subs(f, x, 2) ⇒ ans = (sym) 2⋅y
If x is omitted, symvar is called on f to
determine an appropriate variable.
x and y can also be vectors or lists of syms to replace:
subs(f, {x y}, {sin(x) 16})
⇒ ans = (sym) 16⋅sin(x)
F = [x x*y; 2*x*y y];
subs(F, {x y}, [2 sym(pi)])
⇒ ans = (sym 2×2 matrix)
⎡ 2 2⋅π⎤
⎢ ⎥
⎣4⋅π π ⎦
With only one argument, subs(F) will attempt to find values for
each symbol in F by searching the workspace:
f = x*y ⇒ f = (sym) x⋅y
x = 42; f ⇒ f = (sym) x⋅y
Here assigning a numerical value to the variable x did not
change the expression (because symbols are not the same as variables!)
However, we can automatically update f by calling:
subs(f) ⇒ ans = (sym) 42⋅y
Warning: subs cannot be easily used to substitute a
double matrix; it will cast y to a sym. Instead,
create a “function handle” from the symbolic expression, which can
be efficiently evaluated numerically. For example:
syms x
f = exp(sin(x))
⇒ f = (sym)
sin(x)
ℯ
fh = function_handle(f)
⇒ fh =
@(x) exp (sin (x))
fh(linspace(0, 2*pi, 700)')
⇒ ans =
1.0000
1.0090
1.0181
1.0273
1.0366
...
Note: Mixing scalars and matrices may lead to trouble. We support the case of substituting one or more symbolic matrices in for symbolic scalars, within a scalar expression:
f = sin(x);
g = subs(f, x, [1 sym('a'); pi sym('b')])
⇒ g = (sym 2×2 matrix)
⎡sin(1) sin(a)⎤
⎢ ⎥
⎣ 0 sin(b)⎦
When using multiple variables and matrix substutions, it may be helpful to use cell arrays:
subs(y*sin(x), {x, y}, {3, [2 sym('a')]})
⇒ ans = (sym) [2⋅sin(3) a⋅sin(3)] (1×2 matrix)
subs(y*sin(x), {x, y}, {[2 3], [2 sym('a')]})
⇒ ans = (sym) [2⋅sin(2) a⋅sin(3)] (1×2 matrix)
Caution, multiple interdependent substitutions can be ambiguous and results may depend on the order in which you specify them. A cautionary example:
syms y(x) A B
u = y + diff(y, x)
⇒ u(x) = (symfun)
d
y(x) + ──(y(x))
dx
subs(u, {y, diff(y, x)}, {A, B})
⇒ ans = (sym) A
subs(u, {diff(y, x), y}, {B, A})
⇒ ans = (sym) A + B
Here it would be clearer to explicitly avoid the ambiguity
by calling subs twice:
subs(subs(u, diff(y, x), B), y, A) ⇒ ans = (sym) A + B
See also: @@sym/symfun.
Package: symbolic