Advertisement
nigu

eserc5b

Nov 7th, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.06 KB | None | 0 0
  1. % Esercitazione 5b
  2. % risoluzione di un sistema lineare Ax=b
  3. % (A matrice casuale nxn)
  4. % mediante Gauss con scambio di righe
  5.  
  6. clc, clear;
  7.  
  8. fprintf('\n Risoluzione del sistema Ax=b scambio di righe (A nxn)\n');
  9.  
  10. n=input(' Dai la dimensione del problema: ');
  11.  
  12. % creazione del problema
  13. A=rand(n);
  14. A(1,1)=0;
  15. x_esatto=ones(n,1);
  16. b=A*x_esatto;
  17. A=[A,b];
  18.  
  19. % scaling del sistema
  20. for i=1:n
  21.     d(i)=max(abs(A(i,:)));
  22.     A(i,:)=A(i,:)/d(i);
  23. end
  24.  
  25. % applicazione di Gauss;
  26. for k=1:n-1
  27.     % pscambio di righe. p tale che...
  28.     [mass, p]=max(abs(A(k:n,k)));
  29.     p=p+k-1;
  30.     buf=A(k,:);
  31.     A(k,:)=A(p,:);
  32.     A(p,:)=buf;
  33.     for i=k+1:n
  34.         m = A(i,k)/A(k,k);
  35.         for j=k+1:n+1
  36.             A(i,j)=A(i,j)-m*A(k,j);
  37.         end
  38.     end
  39. end
  40.  
  41.  
  42. %risoluzione del sistema triangolare superiore
  43.  
  44. x(n)=A(n,n+1)/A(n,n);
  45. for i=(n-1):-1:1
  46.     x(i)=A(i,n+1);
  47.     for j=(i+1):n
  48.         x(i)=x(i)-A(i,j)*x(j);
  49.     end
  50.     x(i)=x(i)/A(i,i);
  51. end
  52.  
  53. % output
  54.  
  55. errore_relativo=norm(x_esatto-x')/norm(x_esatto);
  56. fprintf('\n errore=%e\n\n ', errore_relativo);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement