@symfun
: f =
symfun (expr, vars)
¶Define a symbolic function (not usually invoked directly).
A symfun can be abstract or concrete. An abstract symfun represents an unknown function (for example, in a differential equation). A concrete symfun represents a known function such as f(x) = sin(x).
A concrete symfun:
syms x f(x) = sin(x) ⇒ f(x) = (symfun) sin(x) f ⇒ f(x) = (symfun) sin(x) f(1) ⇒ ans = (sym) sin(1) f(x) ⇒ ans = (sym) sin(x)
An abstract symfun:
syms g(x) g ⇒ g(x) = (symfun) g(x)
(Note this creates the sym x
automatically if it does
not already exist.)
Example: multivariable symfuns:
syms x y g(x, y) = 2*x + sin(y) ⇒ g(x, y) = (symfun) 2⋅x + sin(y) syms g(x, y) g ⇒ g(x, y) = (symfun) g(x, y)
Example: creating an abstract function formally of two variables
but depending only on x
:
syms x y h(x) h(x, y) = h(x) ⇒ h(x, y) = (symfun) h(x)
A symfun can be composed inside another. For example, to demonstrate the chain rule in calculus, we might do:
syms f(t) g(t) F(t) = f(g(t)) ⇒ F(t) = (symfun) f(g(t)) diff(F, t) ⇒ ans(t) = (symfun) d d ─────(f(g(t)))⋅──(g(t)) dg(t) dt
It is possible to create an abstract symfun without using the
syms
command:
x = sym('x'); g(x) = sym('g(x)') ⇒ g(x) = (symfun) g(x)
(note the x
must be included on the left-hand side.)
However, syms
is safer because this can fail or give
unpredictable results for certain function names:
beta(x) = sym('beta(x)') -| ??? ... Error ...
whereas on more recent SymPy we get
beta(x) = sym('beta(x)') ⇒ beta(x) = (symfun) Β(x, x)
in either case, we’re not getting an abstract symfun but rather the beta function (see ‘@sym/beta’).
It is usually not necessary to call symfun
directly
but it can be done:
f = symfun(x*sin(y), [x y]) ⇒ f(x, y) = (symfun) x⋅sin(y) g = symfun(sym('g(x)'), x) ⇒ g(x) = (symfun) g(x)
See also: sym, syms.
Package: symbolic