r =
expm (A)
¶Return the exponential of a matrix.
The matrix exponential is defined as the infinite Taylor series
expm (A) = I + A + A^2/2! + A^3/3! + ...
However, the Taylor series is not the way to compute the matrix exponential; see Moler and Van Loan, Nineteen Dubious Ways to Compute the Exponential of a Matrix, SIAM Review, 1978. This routine uses Ward’s diagonal Padé approximation method with three step preconditioning (SIAM Journal on Numerical Analysis, 1977). Diagonal Padé approximations are rational polynomials of matrices
-1 D (A) N (A)
whose Taylor series matches the first
2q+1
terms of the Taylor series above; direct evaluation of the Taylor series
(with the same preconditioning steps) may be desirable in lieu of the
Padé approximation when
Dq(A)
is ill-conditioned.
s =
logm (A)
¶s =
logm (A, opt_iters)
¶[s, iters] =
logm (…)
¶Compute the matrix logarithm of the square matrix A.
The implementation utilizes a Padé approximant and the identity
logm (A) = 2^k * logm (A^(1 / 2^k))
The optional input opt_iters is the maximum number of square roots to compute and defaults to 100.
The optional output iters is the number of square roots actually computed.
s =
sqrtm (A)
¶[s, error_estimate] =
sqrtm (A)
¶Compute the matrix square root of the square matrix A.
Ref: N.J. Higham. A New sqrtm for MATLAB. Numerical Analysis Report No. 336, Manchester Centre for Computational Mathematics, Manchester, England, January 1999.
C =
kron (A, B)
¶C =
kron (A1, A2, …)
¶Form the Kronecker product of two or more matrices.
This is defined block by block as
c = [ a(i,j)*b ]
For example:
kron (1:4, ones (3, 1)) ⇒ 1 2 3 4 1 2 3 4 1 2 3 4
If there are more than two input arguments A1, A2, …, An the Kronecker product is computed as
kron (kron (A1, A2), ..., An)
Since the Kronecker product is associative, this is well-defined.
See also: tensorprod.
C =
tensorprod (A, B, dimA, dimB)
¶C =
tensorprod (A, B, dim)
¶C =
tensorprod (A, B)
¶C =
tensorprod (A, B, "all")
¶C =
tensorprod (A, B, …, "NumDimensionsA", value)
¶Compute the tensor product between numeric tensors A and B.
The dimensions of A and B that are contracted are defined by dimA and dimB, respectively. dimA and dimB are scalars or equal length vectors that define the dimensions to match up. The matched dimensions of A and B must have the same number of elements.
When only dim is used, it is equivalent to
dimA = dimB = dim
.
When no dimensions are specified, dimA = dimB = []
. This
computes the outer product between A and B.
Using the "all"
option results in the inner product between A
and B. This requires size (A) == size (B)
.
Use the property-value pair with the property name
"NumDimensionsA"
when A has trailing singleton
dimensions that should be transferred to C. The specified value
should be the total number of dimensions of A.
MATLAB Compatibility: Octave does not currently support the
"property_name=value"
syntax for the
"NumDimensionsA"
parameter.
C =
blkmm (A, B)
¶Compute products of matrix blocks.
The blocks are given as 2-dimensional subarrays of the arrays A,
B. The size of A must have the form [m,k,…]
and
size of B must be [k,n,…]
. The result is then of size
[m,n,…]
and is computed as follows:
for i = 1:prod (size (A)(3:end)) C(:,:,i) = A(:,:,i) * B(:,:,i) endfor
X =
sylvester (A, B, C)
¶Solve the Sylvester equation.
The Sylvester equation is defined as:
A X + X B = C
The solution is computed using standard LAPACK subroutines.
For example:
sylvester ([1, 2; 3, 4], [5, 6; 7, 8], [9, 10; 11, 12]) ⇒ [ 0.50000, 0.66667; 0.66667, 0.50000 ]