Problema programma mathlab

Mattia912
Salve ragazzi, devo costruire un programma in mathlab per la risoluzione di un sistema lineare. In pratica devo creare solamente la function che poi verra richiamata da uno script gia precompilato. la funzione l ho costruita nel seguente modo:

function [rk, xk,k]= sd (A, b, x0, toll, kmax)
xk=x0;
r0= norm(b-A*xk);
rk=(r0);
k=0;
while (rk < toll && k < kmax)
alfa= [rk,rk]/[A*rk,rk];
xk= xk+(alfa*rk);
rk= norm(b-A*xk);
rk=[rk,r0];
k=k+1;

end

end




ora questa funzione viene richiamata nel seguente script:


clear all

% INGRESSO DATI

%!!!!!!!!! inserire qui sotto la matrice A
A = [2.1 -1 0; -1 2.1 -1; 0 -1 2.1];


%!!!!!!!!! inserire qui sotto il termine noto b
b = [1; 2; 3];


% parametri di controllo del metodo iterativo
toll = 1.e-8; % tolleranza sul residuo
kmax = 100; % numero massimo di iterazioni
x0 = zeros(size(A,1),1); % vettore iniziale

% Parte esecutiva

% chiede l'esecuzione della function che implementa il metodo iterativo
[rk, xk] = sd (A, b, x0, toll, kmax);


% Uscita risultati

%!!!!!!!! inserire qui il codice per la creazione della figura
% che riporta l'andamento dei residui con il numero delle
% iterate k. Aggiungere legende agli assi e titolo alla figura.


il mio problema è che quando mando in esecuzione il programnma non mi esegue proprio il ciclo while della mia function.
Spero che qualcuno mi riesca ad aiutare perche non ne sto venendo fuori!!

Risposte
walter891
hai sbagliato la condizione per il ciclo: noi vogliamo che il residuo sia minore della tolleranza pertanto dobbiamo eseguire il programma finchè esso è maggiore
...
while(rk > toll && k < kmax)
...

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