Problema script matlab con jacobi
Salve a tutti,
vi scrivo questo nuovo post perchè non riesco ad implementare uno script che, a partire dalla function sviluppata, riesca ad analizzare l'andamento della norma dell'errore relativo e del numero di interazioni effettuate al variare della tolleranza, per un sistema avente la matrice A tridiagonale di dimensione N=50 che ha sulla diagonale principale elementi uguali a 2 e sulle diagonali inferiori e superiori elementi uguali a 1. La function implementata è il seguente:
spero possiate aiutarmi
grazie

vi scrivo questo nuovo post perchè non riesco ad implementare uno script che, a partire dalla function sviluppata, riesca ad analizzare l'andamento della norma dell'errore relativo e del numero di interazioni effettuate al variare della tolleranza, per un sistema avente la matrice A tridiagonale di dimensione N=50 che ha sulla diagonale principale elementi uguali a 2 e sulle diagonali inferiori e superiori elementi uguali a 1. La function implementata è il seguente:
function [x,res,err,Niter,rho]=jack(A,b,TOL,Nmax) [~,n]=size(A); Niter=0; x0=zeros(n,1); %calcolo del residuo e della sua norma; r=b-A*x0; res=norm(r); xold=x0; x=x0; %entro nel ciclo in cui avviene il calcolo delle soluzoni %esco dal ciclo solo quando la norma del residuo Ë minore %della tolleranza, o quando oltrepassa il numero massimo %di iterazioni consentite. while res>TOL && Niter<Nmax Niter=Niter+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 somma=0; for j=1:i-1; somma=somma+A(i,j)*xold(j); end for j=i+1:n somma=somma+A(i,j)*xold(j); end %costruzione dell'equazione al passo i-esimo. x(i)=(b(i)-somma)/A(i,i); end r=b-A*x; res=norm(r); xold=x; end err=(inv(A)*r)/norm(x); D=diag(diag(A)); C=inv(D)*(D-A); rho=max(abs(eig(C)));
spero possiate aiutarmi


Risposte
Magari mi sbaglio, ma leggendo al volo il codice non capisco gli indici che stai usando per i due clicli sulle colonne. Perchè fai da 1:i-1 e da i+1:n? Non dovrebbero essere tutti 0 gli elementi A(i,j) che prendi in quel ciclo dato che la tua matrice è tridiagonale?