Problema script matlab con jacobi

Lanny Lana
Salve a tutti, :oops:
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 :oops: grazie :)

Risposte
Lory314
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?

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