martaczaska

Metody numeryczne lab 3

Mar 29th, 2021 (edited)
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.83 KB | None | 0 0
  1. % Lab 3.
  2. % Marta Trzaska 171632 SiSR
  3.  
  4. format compact
  5. close all;
  6. clc;
  7.  
  8. d = 0.86;
  9. N = 11;                 % liczba wszystkich stron www
  10. E = ones(N, N);         % macierz jedynek o wymiarze N x N
  11. B = zeros(N, N);
  12. x = [1/2, 1/10, 1, 1, 1/2, 1/2, 1/2, 1/2, 1/2, 1, 1]; % jeśli nie ma linków wychodzących L(p) = N-1 -> 1/L(p) = 1/10
  13. LAMBDA = diag(x);
  14.  
  15. fid = fopen('input_graph.txt');
  16. EDGES = fscanf(fid, '%i -> %i', [2 inf]);
  17. fclose(fid);
  18.  
  19. %macierz sąsiedztwa B
  20. for i=1:16              % b(p_i, p_j) = 1 jeśli p_j ma link do p_i
  21.     p_j = EDGES(1, i);
  22.     p_i = EDGES(2, i);
  23.     B(p_i, p_j) = 1;
  24. end
  25.  
  26. %macierz M
  27. M = d*B*LAMBDA + ((1 - d)/N*E);
  28.  
  29. %wektor startowy R0
  30. R0 = 1/N * ones(N, 1);
  31.  
  32. %METODA POTĘGOWA
  33. R = R0;
  34. k = 1;
  35. for j=1:100
  36.     R = M * R;
  37.     R = R / norm(R, 1);
  38.     lambda(k) = (R' * M * R) / (R' * R);
  39.     if(k == 1)
  40.         roznica = lambda(k);
  41.     else
  42.         roznica = abs(lambda(k) - lambda(k-1));
  43.     end
  44.     k = k + 1;
  45.    
  46.     if(roznica < 1e-6)
  47.         break;
  48.     end
  49. end
  50.  
  51. R_final = R;
  52.  
  53. figure;
  54. bar([1:11], R_final);
  55. title('Wizualizacja wyników');
  56. xlabel('Numer strony www');
  57. ylabel('Wartość PageRank');
  58.  
  59. %do zad.4
  60. R = R0;
  61. k = 1;
  62. for j=1:100
  63.     R = M * R;
  64.     R = R / norm(R, 1);
  65.     lambda(k) = (R' * M * R) / (R' * R);
  66.     power_err(k) = norm(R - R_final);
  67.     if(k == 1)
  68.        roznica = lambda(k);        
  69.     else
  70.         roznica = abs(lambda(k) - lambda(k-1));
  71.     end
  72.     k = k + 1;
  73.    
  74.     if(roznica < 1e-6)
  75.         break;
  76.     end
  77. end
  78.  
  79. figure;
  80. plot([1:j], log(power_err));
  81. title('Wykres wartości log(power_ eff)');
  82. xlabel('Liczba iteracji');
  83. ylabel('Wartość log(power_ eff)');
  84.  
  85. predkosc_zbieznosci_ap = polyfit(1:length(power_err(1:(k-2))), log(power_err(1:(k-2))), 1)
  86.  
  87. WW = abs(eig(M));
  88. predkosc_zbieznosci_teor = log(abs((WW(1))/abs(WW(2))))
Add Comment
Please, Sign In to add comment