Sto facendo una serie di esercitazioni di analisi numerica in matlab.
C'è un esercizio che mi chiede questo:
Calcola il tempo che l'algoritmo di Gauss con pivoting scalato (che viene dato in altro esercizio) impiega a risolvere sistemi lineari con dimensioni n=10,20,30,..,400. Memorizza i tempi ottenuti in un array di nome tempi(), quindi fai il grafico della variabile n e della corrispondente tabulazione tempi().
Suggerimento: Poni l'algoritmo di Gauss dentro un ciclo in cui n varia da 10 a 400 con passo 10 e quindi memorizza i tempi di calcolo. Utilizza la funzione di Matlab cputime che fornisce il tempo dell'orologio in secondi; la differenza tra due chiamate successive di cputime fornisce il tempo di utilizzo della cpu tra le due chiamate.
io ho svolto l'esercizio. però non riesco a far partire il programma e non riesco a trovare l'errore.
il mio programma è questo:
clear; clc;
for n=10:10:400
ti=cputime;
%sistema casuale Ax=b
A=rand(n); %matrice dei coefficienti
xx=rand(n,1);
b=A*xx; %matrice termini noti
C=[A,b]; %matrice completa del sistema
%triangolarizzazione del sistema
d=[n,1];
for i=1:n
d(i)=max (C(i,1:n+1));
end;
for i=1:n
for j=1:n+1
C(i,j)=C(i,j)/d(i);
end;
end;
for k=1:n-1
p=k;
mass=C(p,k);
for i=k:n
if(abs (C(i,k))>abs(mass))
p=i;
mass=C(p,k);
end;
end;
scambio=C(p,1:n+1);
C(p,1:n+1)=C(k,1:n+1);
C(k,1:n+1)=scambio;
for i=k+1:n
m=C(i,k)/C(k,k);
for j=k+1:n+1
C(i,j)=C(i,j)-m*C(k,j);
end;
end;
end;
%risoluzione del sistema triangolare superiore
%inizializzo x
x=zeros(n,1);
x(n,1)= C(n,n+1)/C(n,n);
for i=n-1:-1:1
x(i,1)=C(i,n+1);
for j=i+1:n
x(i,1)=x(i,1)-C(i,j)*x(j,1);
end;
x(i,1)=x(i,1)/C(i,i);
end;
tf=cputime;
tempi=ones(n);
tempi(n/10)=tf-ti;
end;
%Grafico di n e della variabile tempi
n=[10:10:400];
plot(n,tempi);
qualcuno mi sa dire dove sbaglio?
grazie!!!!


