Anteprima
Vedrai una selezione di 3 pagine su 8
Sistema Tridiagonale Pag. 1 Sistema Tridiagonale Pag. 2
Anteprima di 3 pagg. su 8.
Scarica il documento per vederlo tutto.
Sistema Tridiagonale Pag. 6
1 su 8
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Indicatori di errore

L'accuratezza dipende dalla macchina su cui viene eseguito l'algoritmo. La complessità di tempo è pari a T(n) = O(n). Per quanto riguarda la complessità di spazio è pari a S(n) = O(n).

La routine esegue prioritariamente un controllo sui parametri inseriti, ed avverte l'utente in caso di un inserimento errato dei dati. Un successivo controllo viene effettuato sulla dominanza della diagonale principale sulla dimensione delle altre due. E' presente un controllo sulla diagonale principale per evitare l'inserimento di eventuali elementi nulli che possono compromettere il corretto comportamento della routine.

Errori dovuti ad uno scorretto inserimento dei parametri in ingresso:

  • Mancato inserimento di uno o più parametri
  • Inserimento di una errata tipologia di parametri, come vettori alfanumerici
  • Errori dovuti alla coerenza delle dimensioni dei vettori:

Dimensioni di a, f sono diverse tra loro.

o uguali a d
Dimensioni di b diverse da d
Errori dovuti alla diagonale principale:
Presenza di elementi nulli in d
Non dominanza della diagonale d

Testo della Funzione
function x=tridsys(d,a,f,b)
%Controllo Sui Parametri Inseriti
if nargin==3
error('Hai dimenticati di inserire il vettore con i termini noti')
elseif nargin<3
error('Devi Inserire tutti e tre i vettori delle diagonali')
end
n=length(d);
%Controllo sull'inserimento di elementi alfanumerici
vettin=[d a f b];
if ischar(vettin)
error('Non si possono inserire dei caratteri nei vettori')
end
%Controllo Sulla Coerenza delle Diagonali
if length(a)~=(n-1)
error('Errore di Coerenza delle Diagonali: Dimensione Diagonale Inferiore Errata')
elseif length(f)~=(n-1)
error('Errore di Coerenza delle Diagonali: Dimensione Diagonale Superiore Errata')
end
%Controllo sulla diagonale principale
if all(d)==0
error ('Non devono essere presenti termini nulli sulla diagonale')

principale')
end

% Controllo sul vettore dei termini noti
if length(b)~=n
    error('La lunghezza del vettore dei termini noti è errata')
end

% Controllo della Dominanza
inf=[0,a];
sup=[f,0];
somma=abs(inf)+abs(sup);
if any(abs(d)<abs(somma))
    error ('Matrice non a diagonale strettamente dominante')
end

u(1)=d(1); % Inizializzazione
y(1)=b(1); % Risoluzione di Ly=x mediante Forward Substatution
for i=2:n
    l(i-1)=a(i-1)/u(i-1); % Generazione di L e U
    u(i)=d(i)-l(i-1)*f(i-1);
    y(i)=b(i)-l(i-1)*y(i-1);
end

x(n)=y(n)/u(n); % Risoluzione di Ux=b mediante Back Substatution
for i=n-1:-1:1
    x(i)=(y(i)-f(i)*x(i+1))/u(i);
end

return
Esempi d’uso
>> d=[50,60,70]; % Diagonale Principale
>> a=[5,6]; % Diagonale Inferiore
>> f=[3,4]; % Diagonale Superiore
>> b=[10,11,23,45]; % Termini noti
>> x=tridsys(d,a,f,b)
x = 
    0.19122021660650 0.14632972322503 0.31602888086643
>> Casi di Test
Il test è stato effettuato tramite la seguente funzione generatrice pseudocasuale

Funzione Test Random

function test

d=[rand(1,1)*100 rand(1,1)*100 rand(1,1)*100 rand(1,1)*100 rand(1,1)*100]

a=[rand(1,1),rand(1,1),rand(1,1),rand(1,1)]

f=[rand(1,1),rand(1,1),rand(1,1),rand(1,1)]

b=[rand(1,1),rand(1,1),rand(1,1),rand(1,1),rand(1,1)]

% Funzione da testare

x=tridsys(d,a,f,b); % soluzioni calcolate

disp('Le soluzioni sono:');

disp(x);

return

Descrizione:

La seguente funzione permette di poter generare in modo casuale i vettori utilizzati dalla funzione tridsys che si vuole testare. La funzione è utilizzata solo per verificare l'effettivo calcolo dei risultati. Non è utile per la verifica di eventuali casi di errore.

Test 1:

Test 2:

>> test

>> testd =

d =

Columns 1 through 4

35.59475865902246 32.68298049475134 97.20550940239858 59.2776614699076

1 78.20628303468999 32.63329447676021

80.56581509434429 55.88589744209182

Column 5

75.54200850000721

60.62880159363833

a =

a =

0.06813911061673 0.7203362118078 0.01530843001086

0.48893904537562 0.82746860324208 0.07737165322351

0.07081545082319 0.54040592460043

f = f =

0.59501862951876 0.39106034264950 0.42090971540447 0.02201980897057 0.99921423123756 0.31705418351127

0.04440779172183 0.95574771262860

b = b =

Columns 1 through 4 Columns 1 through 4

0.20263936191293 0.05813801053345 0.28462773568226 0.65432485031293 0.33860900985381 0.41919976106666

0.15488121958053 0.54543777154373

Column 5 Column 5

0.01044524969140 0.27997004118173

Le soluzioni sono: Le soluzioni sono:

Columns 1 through 4 Columns 1 through 4

0.00566399787727 0.00173225572317 0.00290694457948 0.01103678135877 0.00409909143761 0.01264792970555

0.00192179100213 0.00966483698079

Column 5 Column 5

0.00013646919641 0.00453162686372

Casi di test particolari>> x=tridsys??? Error using ==> tridsys [Mancato inserimento dei parametri]Devi Inserire tutti e tre i vettori delle diagonali>>>> x=tridsys(d,l,u)??? Error using ==> tridsys [Mancato inserimento dei termini noti]Hai dimenticati di

inserire il vettore con i termini noti>>>>

x=tridsys(d,l)??? Error using ==> tridsys [Mancato inserimento dei parametri f,b]Devi Inserire tutti e tre i vettori delle diagonali>>>>

x=tridsys(d)??? Error using ==> tridsys [Mancato inserimento dei paramentri a,f,b]Devi Inserire tutti e tre i vettori delle diagonali> >>>>

d=[17 18 19 13];>>

l=[1 3 5 ];>>

u=[1 4 5 7];>>

b=[7 8 9 3];>>

x=tridsys(d,l,u,b)??? Error using ==> tridsys [Dimensione errata del vettore l]Errore di Coerenza delle Diagonali: Dimensione Diagonale Inferiore Errata>>>>

d=[17 18 19 13];>>

l=[1 3 5 4];>>

u=[1 4 5 7];>>

b=[7 8 9];>>

x=tridsys(d,l,u,b)??? Error using ==> tridsys [Dimensione errata del vettore u]Errore di Coerenza delle Diagonali: Dimensione Diagonale Superiore Errata>>

Dettagli
Publisher
A.A. 2012-2013
8 pagine
SSD Scienze matematiche e informatiche MAT/05 Analisi matematica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher cecilialll di informazioni apprese con la frequenza delle lezioni di ANALISI MATEMATICA e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof D'Alessio Alessandra.