Advertisement
Pi-Nerd

Numerical Methods HW 2

Jan 29th, 2015
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.40 KB | None | 0 0
  1. function A=lugauss(A)
  2. %LUGAUSS LU factorization without pivoting
  3. % A = LUGAUSS(A) stores an upper triangular matrix in
  4. % the upper triangular part of A and a lower triangular
  5. % matrix in the strictly lower part of A (the diagonal
  6. % elements of L are 1).
  7. [n,m]=size(A);
  8. if n ~= m; error('A is not a square matrix'); else
  9.  for k = 1:n-1
  10.   for i = k+1:n
  11.    A(i,k) = A(i,k)/A(k,k);
  12.    if A(k,k) == 0, error('Null diagonal element'); end
  13.    j = [k+1:n]; A(i,j) = A(i,j) - A(i,k)*A(k,j);
  14.   end
  15.  end
  16. end
  17.  
  18. for n=1:15
  19.     % Create A
  20.     A = eye(n);
  21.     for i = 1:n
  22.         for j = 1:n
  23.             A(i,j) = 1/(i+j-1);
  24.         end
  25.     end
  26.  
  27.     % Create b
  28.     b = transpose(zeros(1,n));
  29.     b(1) = 1;
  30.  
  31.     % LU-decomposition
  32.     for k = 1:n-1
  33.         for i = k+1:n
  34.             A(i,k) = A(i,k)/A(k,k);
  35.             if A(k,k) == 0, error('Null diagonal element'); end
  36.             j = [k+1:n]; A(i,j) = A(i,j) - A(i,k)*A(k,j);
  37.         end
  38.     end
  39.     L = eye(n) + tril(A,-1);
  40.     U = triu(A);
  41.  
  42.     % Create y
  43.     y = transpose(zeros(1,n));
  44.  
  45.     % Forward substitution
  46.     y(1) = b(1);
  47.     for i = 2:n; y = [y; b(i)-A(i,1:i-1)*y(1:i-1)]; end
  48.  
  49.     % Backward substitution
  50.     x(n)=y(n)/A(n,n);
  51.     for i = 3:-1:1
  52.         x(i) = (y(i)-A(i,i+1:n)*x(i+1:n)')/A(i,i);
  53.     end
  54.  
  55.     A*x - b
  56.  
  57.     fprintf('\nn=%i\n',n) % Print data we care about.
  58.     K=cond(A)
  59.     alpha=K*(norm(b-A*x))/(norm(b))
  60. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement