ingMark (Ex-Member)
Pro
Messaggi: 176
Iscritto: 19/07/2009
|
L'altr'anno ne ho implementata una versione matlab durante il corso di calcolo numerico.
Codice sorgente - presumibilmente C/C++ |
%es11
function [x,r] = jacobi(A,b,itermax);
N = length(b);
D = diag(diag(A));
x= zeros(N,1);
%facoltativo per verificare la teoria
%si calcola il raggio spettrale della matrice
%se il raggio spettrale è minore di uno il metodo converge
I = eye(N);
D1 = inv(D);
Bj = I - D1*A; %matrice di interazione di jacobi
r = max(abs(eig(Bj))); %raggio spettrale
%////////////////////////////////////////
for i=1:itermax
x = D1*((D-A)*x+b);
%x = D\((D-A)*x+b); da usare se non si calcola il raggio spettrale
end;
|
Tradurlo in C non dovrebbe essere molto difficile, a patto di avere qualche nozione di algebra lineare (wikipedia ti può sicuramente aiutare)
|