Advertisement
Guest User

Untitled

a guest
May 17th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 1.48 KB | None | 0 0
  1. function [coeff,norm2_res]=polminquad(x,y,m)
  2.   % inicialitzem la matriu A
  3.   N = length(x);
  4.   A = ones(N, m + 1);
  5.   for i = 1:N
  6.     for j = 1:m
  7.       A(i, j + 1) = x(i)**j;
  8.     endfor
  9.   endfor
  10.  
  11.   % calculem les matrius Q i R
  12.   [Q, R] = QR(A);
  13.  
  14.   % imprimim les normes
  15.   disp(sprintf("1-norm of Q'Q - Id = %e", norm(Q'*Q - eye(m + 1), 1)));
  16.   disp(sprintf("Supremum norm of Q'Q - Id = %e", norm(Q'*Q - eye(m + 1), inf)));
  17.  
  18.   % fem que y sigui vector columna
  19.   y = y';
  20.  
  21.   % resolem el sistema R*a = Q'*y
  22.   % que es equivalent al sistema de minims quadrats de A*a = y
  23.   b = Q'*y;
  24.   a = R\b;
  25.  
  26.   % els coeficients son el vector a en format fila
  27.   coeff = a';
  28.   norm2_res = norm(A*a - y, 2);
  29. end
  30.  
  31. function [Q, R] = QR(A)
  32.   % obtenim les mides
  33.   [n, m] = size(A);
  34.   % inicialitzem les matrius Q i R
  35.   Q = zeros(n, m);
  36.   R = zeros(m, m);
  37.   % iterem sobre les columnes de A
  38.   for i = 1:m
  39.     % guardem a la diagonal de R la norma de la columna iesima de A
  40.     R(i, i) = norm(A(:,i), 2);
  41.     % normalitzem aquesta columna i la guardem a Q
  42.     Q(:, i) = A(:, i)/R(i, i);
  43.     %iterem sobre les columnes mes a la dreta de la que estem
  44.     for j = i+1:m
  45.       % guardem a la part superior de R la projeccio de
  46.       % la columna iesima de Q i la jesima de A
  47.       R(i, j) = dot(Q(:, i), A(:, j));
  48.       % restem de la columna jesima de A aquesta projeccio
  49.       % fent-la ortogonal a la iesima de Q
  50.       A(:, j) = A(:, j) - R(i, j)*Q(:, i);
  51.     endfor
  52.   endfor
  53. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement