MATH 372 -- Numerical Linear Algebra SVD for numerical rank determination March 26, 2007 As we know, matrices like this A cannot be represented exactly with any binary or decimal floating point number system. >> A = [1/3 2/3 4/3; 1/6 1/3 2/3; 1/12 1/6 1/3; 1/24 1/12 1/6] A = 0.3333 0.6667 1.3333 0.1667 0.3333 0.6667 0.0833 0.1667 0.3333 0.0417 0.0833 0.1667 This means that we are dealing with a perturbed matrix right from the start, and the perturbation will most likely change the rank. For jobs like computing ranks, this means we must rely on more sophisticated methods than just row-reduction. The SVD gives one good approach. We first tell MATLAB to display results in "scientific notation" with short mantissas: >> format short e Then the SVD command (displaying the U, S, V factors) is: >> [U,S,V]=svd(A) U = -8.6772e-01 4.9705e-01 1.0530e-17 1.2960e-17 -4.3386e-01 -7.5741e-01 -4.3644e-01 -2.1822e-01 -2.1693e-01 -3.7870e-01 8.9830e-01 -5.0851e-02 -1.0847e-01 -1.8935e-01 -5.0851e-02 9.7457e-01 S = 1.7604e+00 0 0 0 3.1032e-17 0 0 0 0 0 0 0 V = -2.1822e-01 -9.7590e-01 0 -4.3644e-01 9.7590e-02 -8.9443e-01 -8.7287e-01 1.9518e-01 4.4721e-01 The singular values are the diagonal entries in S: 1.7604e+00 3.1032e-17 0 Even though the second is not exactly zero, we suspect the rank should be 1 since it is so small. MATLAB agrees: rank(A) ans = 1