funm
General matrix function
Syntax
Description
computes the function F
= funm(A
,f
)f
(A
) for the square
matrix A
. For details, see Matrix Function.
Examples
Matrix Cube Root
Find matrix B
, such that
B3 = A
, where
A
is a 3-by-3 identity matrix.
To solve B3 = A
, compute the cube
root of the matrix A
using the funm
function. Create the symbolic function f(x) = x^(1/3)
and use it
as the second argument for funm
. The cube root of an identity
matrix is the identity matrix itself.
A = sym(eye(3)) syms f(x) f(x) = x^(1/3); B = funm(A,f)
A = [ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1] B = [ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1]
Replace one of the 0
elements of matrix A
with 1
and compute the matrix cube root again.
A(1,2) = 1 B = funm(A,f)
A = [ 1, 1, 0] [ 0, 1, 0] [ 0, 0, 1] B = [ 1, 1/3, 0] [ 0, 1, 0] [ 0, 0, 1]
Now, compute the cube root of the upper triangular matrix.
A(1:2,2:3) = 1 B = funm(A,f)
A = [ 1, 1, 1] [ 0, 1, 1] [ 0, 0, 1] B = [ 1, 1/3, 2/9] [ 0, 1, 1/3] [ 0, 0, 1]
Verify that B3 = A
.
B^3
ans = [ 1, 1, 1] [ 0, 1, 1] [ 0, 0, 1]
Matrix Lambert W Function
Find the matrix Lambert W function.
First, create a 3-by-3 matrix A
using variable-precision
arithmetic with five digit accuracy. In this example, using variable-precision
arithmetic instead of exact symbolic numbers lets you speed up computations and
decrease memory usage. Using only five digits helps the result to fit on
screen.
savedefault = digits(5); A = vpa(magic(3))
A = [ 8.0, 1.0, 6.0] [ 3.0, 5.0, 7.0] [ 4.0, 9.0, 2.0]
Create the symbolic function f(x) = lambertw(x)
.
syms f(x) f(x) = lambertw(x);
To find the Lambert W function (W0
branch) in a matrix sense, callfunm
using
f(x)
as its second argument.
W0 = funm(A,f)
W0 = [ 1.5335 + 0.053465i, 0.11432 + 0.47579i, 0.36208 - 0.52925i] [ 0.21343 + 0.073771i, 1.3849 + 0.65649i, 0.41164 - 0.73026i] [ 0.26298 - 0.12724i, 0.51074 - 1.1323i, 1.2362 + 1.2595i]
Verify that this result is a solution of the matrix equation A =
W0·eW0
within the specified
accuracy.
W0*expm(W0)
ans = [ 8.0, 1.0 - 5.6843e-13i, 6.0 + 1.1369e-13i] [ 3.0 - 2.2737e-13i, 5.0 - 2.8422e-14i, 7.0 - 4.1211e-13i] [ 4.0 - 2.2737e-13i, 9.0 - 9.9476e-14i, 2.0 + 1.4779e-12i]
Now, create the symbolic function f(x)
representing the branch
W-1
of the Lambert W
function.
f(x) = lambertw(-1,x);
Find the W-1
branch for the matrix
A
.
Wm1 = funm(A,f)
Wm1 = [ 0.40925 - 4.7154i, 0.54204 + 0.5947i, 0.13764 - 0.80906i] [ 0.38028 + 0.033194i, 0.65189 - 3.8732i, 0.056763 - 1.0898i] [ 0.2994 - 0.24756i, - 0.105 - 1.6513i, 0.89453 - 3.0309i]
Verify that this result is the solution of the matrix equation A =
Wm1·eWm1
within the specified
accuracy.
Wm1*expm(Wm1)
ans = [ 8.0 - 8.3844e-13i, 1.0 - 3.979e-13i, 6.0 - 9.0949e-13i] [ 3.0 - 9.6634e-13i, 5.0 + 1.684e-12i, 7.0 + 4.5475e-13i] [ 4.0 - 1.3642e-12i, 9.0 + 1.6698e-12i, 2.0 + 1.7053e-13i]
Matrix Exponential, Logarithm, and Square Root
You can use funm
with appropriate second
arguments to find matrix exponential, logarithm, and square root. However, the
more efficient approach is to use the functions expm
,
logm
, and sqrtm
for this
task.
Create this square matrix and find its exponential, logarithm, and square root.
syms x A = [1 -1; 0 x] expA = expm(A) logA = logm(A) sqrtA = sqrtm(A)
A = [ 1, -1] [ 0, x] expA = [ exp(1), (exp(1) - exp(x))/(x - 1)] [ 0, exp(x)] logA = [ 0, -log(x)/(x - 1)] [ 0, log(x)] sqrtA = [ 1, 1/(x - 1) - x^(1/2)/(x - 1)] [ 0, x^(1/2)]
Find the matrix exponential, logarithm, and square root of A
using funm
. Use the symbolic expressions
exp(x)
, log(x)
, and
sqrt(x)
as the second argument of funm
.
The results are identical.
expA = funm(A,exp(x)) logA = funm(A,log(x)) sqrtA = funm(A,sqrt(x))
expA = [ exp(1), exp(1)/(x - 1) - exp(x)/(x - 1)] [ 0, exp(x)] logA = [ 0, -log(x)/(x - 1)] [ 0, log(x)] sqrtA = [ 1, 1/(x - 1) - x^(1/2)/(x - 1)] [ 0, x^(1/2)]
Input Arguments
Output Arguments
More About
Tips
For compatibility with the MATLAB®
funm
function,funm
accepts the following arguments:Function handles such as
@exp
and@sin
, as its second input argument.The
options
input argument, such asfunm(A,f,options)
.Additional input arguments of the function
f
, such asfunm(A,f,options,p1,p2,...)
The
exitflag
output argument, such as[F,exitflag] = funm(A,f)
. Here,exitflag
is1
only if thefunm
function call errors, for example, if it encounters a division by zero. Otherwise,exitflag
is0
.
For more details and a list of all acceptable function handles, see the MATLAB
funm
function.If the input matrix
A
is numeric (not a symbolic object) and the second argumentf
is a function handle, then thefunm
call invokes the MATLABfunm
function.
Version History
Introduced in R2014b