Main Content

The following examples, which show how to perform basic linear algebraic operations, are based on a symbolic version of the 3-by-3 Hilbert matrix.

Generate the 3-by-3 Hilbert matrix. With `format short`

, MATLAB^{®} prints the output shown.

H = hilb(3)

H = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000

The computed elements of `H`

are floating-point numbers that are the
ratios of small integers. `H`

is a MATLAB array of class `double`

.

Convert `H`

to a symbolic matrix.

H = sym(H)

H = [ 1, 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5]

Symbolic operations on `H`

produce results that correspond to the
infinite-precision Hilbert matrix, `sym(hilb(3))`

, not its floating-point
approximation, `hilb(3)`

.

Find the inverse of `H`

.

inv(H)

ans = [ 9, -36, 30] [ -36, 192, -180] [ 30, -180, 180]

Find the determinant of `H`

.

det(H)

ans = 1/2160

You can use the backslash operator to solve a system of simultaneous linear equations. For
example, solve `H*x = b`

.

b = [1; 1; 1]; x = H\b

x = 3 -24 30

All three results—the inverse, the determinant, and the solution to the linear system—are the exact results corresponding to the infinite-precision, rational, Hilbert matrix.

Contrast the preceding operations with variable-precision arithmetic using 20 digits of precision.

digits(20) V = vpa(H)

V = [ 1.0, 0.5, 0.33333333333333333333] [ 0.5, 0.33333333333333333333, 0.25] [ 0.33333333333333333333, 0.25, 0.2]

The decimal points in the representation of the individual elements indicate that MATLAB is using variable-precision arithmetic. The result of each arithmetic operation is rounded to 20 significant decimal digits.

Invert the matrix and note that errors are magnified by the matrix condition number, which
for `hilb(3)`

is about 500.

cond(V)

ans = 524.0567775860608

Compute the difference of the inverses of the infinite-precision and variable-precision versions.

ih = inv(H)

ih = [ 9, -36, 30] [ -36, 192, -180] [ 30, -180, 180]

iv = inv(V)

iv = [ 9.0, -36.0, 30.0] [ -36.0, 192.0, -180.0] [ 30.0, -180.0, 180.0]

Although these matrices look the same, calculate the difference to see that they are not.

dhv = ih - iv

dhv = [ -5.4929962552349494034e-26, 2.4556924435168009098e-25, -2.1971985020939797614e-25] [ 2.4556924435168009098e-25, -1.2666203129718236271e-24, 1.1373733422604130529e-24] [ -2.1971985020939797614e-25, 1.1373733422604130529e-24, -1.0856745539758488233e-24]

Solve the equation `V*y = b`

. The answer looks the same as the solution
to `H*x = b`

.

y = V\b

y = 3.0 -24.0 30.0

Calculate the difference between `x`

and `y`

to see the
small difference between the two solutions.

x-y

ans = 8.0779356694631608874e-27 -6.4623485355705287099e-26 7.1085833891275815809e-26

Using `vpa`

with `digits(16)`

offers
comparable precision to using standard double-precision MATLAB routines.

Find a value `s`

for `H(1,1)`

that makes
`H`

singular.

syms s Hs = H; Hs(1,1) = s Z = det(Hs) sol = solve(Z)

Hs = [ s, 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5] Z = s/240 - 1/270 sol = 8/9

Substitute the solution for `s`

into `Hs`

.

Hs = subs(Hs, s, sol)

Hs = [ 8/9, 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5]

Verify that the determinant of `Hs`

is zero.

det(Hs)

ans = 0

Find the null space and column space of `Hs`

. Both spaces are
nontrivial.

N = null(Hs) C = colspace(Hs)

N= 3/10 -6/5 1 C = [ 1, 0] [ 0, 1] [ -3/10, 6/5]

Check that `N`

is in the null space of `Hs`

.

Hs*N

ans = 0 0 0