Implementazione del metodo di Jacobi

morenaria
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!

Risposte
morenaria
Potete per favore dirmi cosa non va in come ho impostato la domanda?

Raptorista1
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!

morenaria
Ti ringrazio.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.