Uni.AN-Matlab-Jacobi History
Show minor edits - Show changes to output
Added lines 1-70:
(:title Matlab - Metodo di Jacobi:) [[Torna alla pagina di Analisi Numerica->Analisi numerica]] ----
%titolo%''':: Matlab - Metodo di Jacobi ::'''
[@% Metodo iterativo di Jacobi % -------------------------- % restituisce la soluzione del sistema x ed il numero % di iterazioni effettuate N % richiede come parametri di ingresso la matrice del sistema a, % il termine noto b, il vettore iniziale x0, l'errore tollerato % epsilon, il numero massimo di iterazioni consentite function [x,it]=jacobi(a,b,x0,epsilon,nmax); % calcola la dimensione della matrice a [n,n] = size(a); % inizializzo la variabile it per il conteggio delle iterazioni it = 0;
% per verificare che l'errore sia inferiore a epsilon dobbiamo % stimarlo a posteriori, a partire cioè da una quantità già % calcolata. Uno stimatore è il residuo, definito da: r = b - a * x0; % posso utilizzare la norma del residuo per effettuare % successivamente il test di arresto res = norm(r);
% inizializzo le variabili xold e x che utilizzerò e % aggiornerò nelle varie iterazioni xold = x0; x = x0;
% entro nel ciclo in cui avviene il calcolo delle soluzioni % esco dal ciclo solo quando la norma del residuo è minore % della tolleranza epsilon (1), o quando oltrepasso il % numero massimo di iterazioni consentite (2) % (1) (2) % ------------- --------- while res > epsilon & it < nmax % incremento di 1 il numero di iterazioni it = it + 1; % ciclo in cui costruisco la sommatoria dei prodotti % tra gli elementi della matrice e i vecchi valori % della variabile x for i=1:n s = 0; % devo spezzare il ciclo for in due distinti perché % nella sommatoria non deve figurare il caso in % cui j = i . Il primo for infatti arriva fino a % (i-1), mentre il secondo parte da (i+1) for j=1:i-1, s = s + a(i,j) * xold(j); end for j=i+1:n, s = s + a(i,j) * xold(j); end % costruzione dell'equazione al passo i-esimo x(i) = (b(i) - s) / a(i,i); end % ricalcolo il residuo ad ogni iterata... r = b - a * x; % ...e subito dopo la sua norma res = norm(r); % termino l'iterazione assegnando alla variabile xold % la x attuale, così che il metodo possa proseguire xold = x; end@]
---- [[Torna alla pagina di Analisi Numerica->Analisi numerica]]
|