Problema programma mathlab
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!!
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
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) ...