Implementazione del metodo di Jacobi
Ciao a tutti, devo implementare il metodo iterativo di Jacobi. Il mio codice e' questo:
function [sol,k,err,flag]=Jacobi(A,b,x0,nmax,toll)
n = size(A)(1);
if size(b,1)==1
b = b.';
end
if size(x0,1)==1
x0 = x0.';
end
flag=1;
d = diag(A);
D = diag(1./d);
J = -D*(A-diag(d));
q = b./d;
k=1;
err=toll+1;
sol=x0;
while(k<=nmax & err>toll)
sol=J*x0+q;
k=k+1;
errk = norm(sol-x0)/norm(sol);
disp([k,errk])
x0=sol;
err=errk;
endwhile
if k>nmax
flag=0;
endif
endfunction
Non capisco cosa ci sia che non vada, ma non riesco a farlo convergere utilizzando una matrice e un vettore di partenza quasi random, perche' l'errore si stabilizza molto prima dello 0. Potete aiutarmi?
Grazie mille!
function [sol,k,err,flag]=Jacobi(A,b,x0,nmax,toll)
n = size(A)(1);
if size(b,1)==1
b = b.';
end
if size(x0,1)==1
x0 = x0.';
end
flag=1;
d = diag(A);
D = diag(1./d);
J = -D*(A-diag(d));
q = b./d;
k=1;
err=toll+1;
sol=x0;
while(k<=nmax & err>toll)
sol=J*x0+q;
k=k+1;
errk = norm(sol-x0)/norm(sol);
disp([k,errk])
x0=sol;
err=errk;
endwhile
if k>nmax
flag=0;
endif
endfunction
Non capisco cosa ci sia che non vada, ma non riesco a farlo convergere utilizzando una matrice e un vettore di partenza quasi random, perche' l'errore si stabilizza molto prima dello 0. Potete aiutarmi?
Grazie mille!
Risposte
Potete per favore dirmi cosa non va in come ho impostato la domanda?
Non va che hai incollato un pezzo di codice senza un commento, senza indentazione e senza una formula che spieghi cosa stai facendo [non tutti sanno sempre a memoria il metodo di Jacobi, per esempio io non lo so].
Potresti provare a fare un po' di debug: funziona con casi test semplici? Prova con matrici molto piccole o casi che sicuramente devono funzionare, non sfidare la fortuna!
Potresti provare a fare un po' di debug: funziona con casi test semplici? Prova con matrici molto piccole o casi che sicuramente devono funzionare, non sfidare la fortuna!
Ti ringrazio.