mihainan

Nan Mihai - MPI - cu bonus (Metode numerice)

Apr 13th, 2014
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.07 KB | None | 0 0
  1. function [ lambda, x, OK ] = MPI(A, y, maxiter, epsilon)
  2.  
  3.     [n n] = size(A);   
  4.     k = 0;     
  5.     e = 2 * epsilon;
  6.     OK = 1;
  7.     u = y' * A * y;
  8.  
  9.     while e >= epsilon
  10.         if k > maxiter
  11.             OK = 0;
  12.             error("Eroare!");
  13.         endif
  14.         %Rezolvarea sistemului folosind transformarea ortogonala
  15.         B = A-u*eye(n);
  16.         [Q, R] = Gram-Schmidt(B); %Algoritmul Gram-Schmidt
  17.         y1 = Q'*y;
  18.         x = SST(R, y1); %Rezolvarea unui sistem triunghiular superior prin subtitutii inverse
  19.         %Sfarsit rezolvarea sistemului
  20.         %x = (A - u*eye(n)) \ y;
  21.         x = x / norm(x);
  22.         lambda = x' * A * x;
  23.         e = abs(1 - abs(y' * x));
  24.         y = x;
  25.         k = k + 1;
  26.         u = lambda;
  27.     endwhile
  28. endfunction
  29.  
  30. function [Q, R] = Gram-Schmidt(A)
  31.     [n , n] = size(A);
  32.     Q = A;
  33.     R = zeros(n);
  34.     for k=1:n
  35.         R(k, k) = norm(Q(:,k));
  36.         Q(:. k) = Q(:, k) / R(k, k);
  37.         for j = k+1:n
  38.             R(k, j) = Q(:, k)'*Q(:, j);
  39.             Q(:, j) = Q(:, j) - Q(:, k)*R(k, j):
  40.         endfor
  41.     endfor
  42. endfunction
  43.  
  44. function x = SST (A,b)
  45.     [n,n]=size(A);
  46.     x=zeros(1,n);
  47.     x(n)=b (n)/A(n,n);
  48.     for i=n-1:-1:1
  49.         x(i)=(b(i)-A(i,i+1:n)*x (i+1:n)')/A(i,i);
  50.     endfor
  51. endfunction
Advertisement
Add Comment
Please, Sign In to add comment