Page 232 - MATLAB an introduction with applications
P. 232

Numerical Methods ———  217


                     –19.6143
                     –28.9058
                      –7.8027
                                                                43 2    1 
                                                                38 6 12  
                   Example E4.3: Tridiagonalize the given matrix [A] =    26 8  3    by Householder’s method.
                                                                         
                                                                 12 3  4  
                   Solution:
                   The following program is used
                   %Input – A is an nxn symmetric matrix
                   A = [4 3 2 1; 3 8 6 12;2 6 8 3; 1 2 3 4];
                   %Output – T is a tridiagonal matrix

                   [n,n] = size(A);
                   for k = 1:n – 2
                      s = norm(A(k +1:n, k));
                      if (A(k + 1, k)<0)
                         s = –s;
                      end
                      r = sqrt(2 s (A(k +1, k) + s));
                                * *
                      W(1:k) = zeros(1,k);
                      W(k + 1) = (A(k + 1,k) + s)/r;
                      W(k + 2:n) = A(k + 2:n, k)’/r;
                      V(1:k) = zeros(1, k);
                      V(k+1:n) = A(k + 1:n, k + 1:n) W(k + 1:n)’;
                                                     *
                      c = W(k + 1:n) V(k + 1:n)’;
                                   *
                      Q(1:k) = zeros(1, k);
                      Q(k + 1:n) = V(k+1:n) – c W(k + 1:n);
                                                *
                      A (k + 2: n, k) = zeros(n – k – 1,1);
                      A (k, k + 2: n) = zeros (1, n – k – 1);
                      A(k +1, k) = –s;
                      A(k, k + 1) = –s;
                      A(k + 1: n, k + 1:n) =A(k + 1:n, k + 1:n) – 2 W(k + 1:n)’ Q(k + 1:n) –2 Q(k +
                                                                     *
                                                                                   *
                                                                                                   *
                   1:n)’ W(k + 1:n);
                         *
                   end
                   T=A;
                   fprintf(‘Matrix in tridiagonal form is\n’);
                   disp(T)
   227   228   229   230   231   232   233   234   235   236   237