General matrix function
computes
the function F = funm(A,f)f(A) for the
square matrix A. For details, see Matrix Function.
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]
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]
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)]
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
as funm(A,f,options).
Additional input arguments of the function f,
such as funm(A,f,options,p1,p2,...)
The exitflag output argument, such
as [F,exitflag] = funm(A,f). Here, exitflag is 1 only
if the funm function call errors, for example,
if it encounters a division by zero. Otherwise, exitflag is 0.
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 argument f is
a function handle, then the funm call invokes
the MATLAB funm function.