Powers and Exponentials

This topic shows how to compute matrix powers and exponentials using a variety of methods.

Positive Integer Powers

If A is a square matrix and p is a positive integer, then A^p effectively multiplies A by itself p-1 times. For example:

A = [1 1 1
1 2 3
1 3 6];
A^2
ans = 3×3

3     6    10
6    14    25
10    25    46

Inverse and Fractional Powers

If A is square and nonsingular, then A^(-p) effectively multiplies inv(A) by itself p-1 times.

A^(-3)
ans = 3×3

145.0000 -207.0000   81.0000
-207.0000  298.0000 -117.0000
81.0000 -117.0000   46.0000

MATLAB® calculates inv(A) and A^(-1) with the same algorithm, so the results are exactly the same. Both inv(A) and A^(-1) produce warnings if the matrix is close to being singular.

isequal(inv(A),A^(-1))
ans = logical
1

Fractional powers, such as A^(2/3), are also permitted. The results using fractional powers depend on the distribution of the eigenvalues of the matrix.

A^(2/3)
ans = 3×3

0.8901    0.5882    0.3684
0.5882    1.2035    1.3799
0.3684    1.3799    3.1167

Element-by-Element Powers

The .^ operator calculates element-by-element powers. For example, to square each element in a matrix you can use A.^2.

A.^2
ans = 3×3

1     1     1
1     4     9
1     9    36

Square Roots

The sqrt function is a convenient way to calculate the square root of each element in a matrix. An alternate way to do this is A.^(1/2).

sqrt(A)
ans = 3×3

1.0000    1.0000    1.0000
1.0000    1.4142    1.7321
1.0000    1.7321    2.4495

For other roots, you can use nthroot. For example, calculate A.^(1/3).

nthroot(A,3)
ans = 3×3

1.0000    1.0000    1.0000
1.0000    1.2599    1.4422
1.0000    1.4422    1.8171

These element-wise roots differ from the matrix square root, which calculates a second matrix $\mathit{B}$ such that $\mathit{A}=\mathrm{BB}$. The function sqrtm(A) computes A^(1/2) by a more accurate algorithm. The m in sqrtm distinguishes this function from sqrt(A), which, like A.^(1/2), does its job element-by-element.

B = sqrtm(A)
B = 3×3

0.8775    0.4387    0.1937
0.4387    1.0099    0.8874
0.1937    0.8874    2.2749

B^2
ans = 3×3

1.0000    1.0000    1.0000
1.0000    2.0000    3.0000
1.0000    3.0000    6.0000

Scalar Bases

In addition to raising a matrix to a power, you also can raise a scalar to the power of a matrix.

2^A
ans = 3×3

10.4630   21.6602   38.5862
21.6602   53.2807   94.6010
38.5862   94.6010  173.7734

When you raise a scalar to the power of a matrix, MATLAB uses the eigenvalues and eigenvectors of the matrix to calculate the matrix power. If [V,D] = eig(A), then ${2}^{\mathit{A}}={\mathit{V}\text{\hspace{0.17em}}\mathrm{2}}^{\mathit{D}}{\text{\hspace{0.17em}}\mathit{V}}^{-1}$.

[V,D] = eig(A);
V*2^D*V^(-1)
ans = 3×3

10.4630   21.6602   38.5862
21.6602   53.2807   94.6010
38.5862   94.6010  173.7734

Matrix Exponentials

The matrix exponential is a special case of raising a scalar to a matrix power. The base for a matrix exponential is Euler's number e = exp(1).

e = exp(1);
e^A
ans = 3×3
103 ×

0.1008    0.2407    0.4368
0.2407    0.5867    1.0654
0.4368    1.0654    1.9418

The expm function is a more convenient way to calculate matrix exponentials.

expm(A)
ans = 3×3
103 ×

0.1008    0.2407    0.4368
0.2407    0.5867    1.0654
0.4368    1.0654    1.9418

The matrix exponential can be calculated in a number of ways. See Matrix Exponentials for more information.

Dealing with Small Numbers

The MATLAB functions log1p and expm1 calculate $\mathrm{log}\left(1+\mathit{x}\right)$ and ${\mathit{e}}^{\mathit{x}}-1$ accurately for very small values of $\mathit{x}$. For example, if you try to add a number smaller than machine precision to 1, then the result gets rounded to 1.

log(1+eps/2)
ans = 0

However, log1p is able to return a more accurate answer.

log1p(eps/2)
ans = 1.1102e-16

Likewise for ${\mathit{e}}^{\mathit{x}}-1$, if $\mathit{x}$ is very small then it is rounded to zero.

exp(eps/2)-1
ans = 0

Again, expm1 is able to return a more accurate answer.

expm1(eps/2)
ans = 1.1102e-16