Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di computer » Funzione 'sislin'

Funzione 'sislin'




Visite: 1281Gradito:apreciate 5-stela [ Picolo appunti ]
Leggi anche appunti:

Php e mysql


PHP e MySQL - MySQL MySQL è un database SQL server molto veloce, multi-processo,

Analisi delle tecnologie studiate - OpenSPCoop


Analisi delle tecnologie studiate - OpenSPCoop In questo capitolo ci occuperemo

Il meccanismo semaforico


IL MECCANISMO SEMAFORICO Soffermiamoci ora sul modello di programmazione a
immagine di categoria

Scarica gratis Funzione 'sislin'

Funzione 'sislin'

SCOPO:

Calcolare la soluzione di m sistemi lineari di n equazioni in n incognite, nel caso di due parametri in input, o dell'inversa di una matrice, nel caso di un unico parametro di input.

SPECIFICHE:

x=sislin(A,b)

DESCRIZIONE ALGORITMO:

Per il calcolo della soluzione, la funzione fa uso di tre algoritmi.

·L' algoritmo di fattorizzazione LU con pivoting parziale e scambio virtuale delle righe, per calcolare le matrici triangolari inferiori e superiori L ed U, e la matrice P delle permutazioni (virtuale).

·L'algoritmo di forward subtitution per calcolare y tale che Ly=Pb

·L'algoritmo di back subtitution per calcolare la soluzione x tale che Ux=y.

LISTA PARAMETRI:

Input:

.A matrice quadrata dei coefficienti reali delle n equazioni, o matrice quadrata di cui calcolare l'inversa.

.b facoltativo matrice nxm dei termini noti, per la risoluzione di m sistemi lineari di n equazioni in n incognite. Se b non viene dato in input, la funzione calcola l'inversa della matrice A.

Output:

.x matrice inversa della matrice A, nel caso di un solo dato in input

.x matrice nxm, le cui colonne sono le m soluzioni degli m sistemi lineari Ax=b, nel caso di due dati di input


INDICATORI DI ERRORI:

'Numero di dati in input insufficiente'

Non ci sono parametri di input

.'b deve avere lo stesso numero di righe di A'-

Il vettore/matrice b deve avere tanti termini noti quante sono le equazioni del sistema lineare.

.'A deve essere una matrice di reali'

La matrice A inserita è una stringa

.'La matrice è vuota,nulla da calcolare'

A è una matrice vuota

.'Attenzione matrice non quadrata'

A non è una matrice quadrata nxn

'A deve essere una matrice di reali'

A deve essere una matrice di reali

.'b deve essere una matrice di reali'

La matrice b inserita è una stringa o una matrice di complessi

.'Attenzione il sistema è singolare. Il programma verrà arrestato!'

Il sistema da risolvere è un sistema singolare, quindi la soluzione non è unica

.'Attenzione sistema singolare su ultimo passo.  Il programma verrà arrestato!'

Il sistema da risolvere è un sistema singolare, quindi la soluzione non è unica


COMPLESSITA':

La complessità spaziale di tale algoritmo è S(n)=O(n2), in            quanto l'algoritmo è di tipo in place, cioè l'unico spazio di memoria che occupa è quello della matrice nxn, usando per le variabili interne lo spazio di memoria già allocato e non più utile. La complessità temporale invece è: T(n)=O(n3/3+mn2) con m numero dei sistemi lineari da risolvere.

ACCURATEZZA:

L'accuratezza dell'algoritmo è massima, nel caso in cui la            matrice A dei coefficienti sia una matrice bencondizionata. Al contrario se la matrice è malcondizionata la soluzione potrebbe essere poco accurata. Si invita a controllare il condizionamento della matrice A con la routine matlab cond(A).



ESEMPIO D'USO:

A=rand(4);

b=rand(4,6);

x=sislin(A,b)

x =

-0.2703 0.0620 0.0987 0.7654 -0.2380 0.8251

0.4077 0.4003 0.1056 0.4601 0.5383 0.4422

0.1431 0.1797 0.0561 0.7122 -0.5151 0.7930

0.2749 0.4722 0.2308 -0.6636 1.1931 -0.5502


sislin.m

%sislin

x=sislin(A,b)

La funzione sislin calcola, a seconda del numero di

parametri in input, l'inversa della matrice A (un solo

parametro di input), oppure la risoluzione di m sistemi

lineari, con A matrice dei coefficienti e b (nxm)

matrice dei termini noti (in caso di due parametri in

input)

%ESEMPIO D'USO

%A=rand(4)

%A =

0.2077 0.8443 0.2277 0.4302

0.3012 0.1948 0.4357 0.1848

0.4709 0.2259 0.3111 0.9049

0.2305 0.1707 0.9234 0.9797

%b=rand(4,6)

%b =

0.4389 0.5949 0.2217 0.4242 0.8010 0.4886

0.1111 0.2622 0.1174 0.5079 0.0292 0.5785

0.2581 0.6028 0.2967 0.0855 0.9289 0.2373

0.4087 0.7112 0.3188 0.2625 0.7303 0.4588

%x=sislin(A,b)

%x =

-0.2703 0.0620 0.0987 0.7654 -0.2380 0.8251

0.4077 0.4003 0.1056 0.4601 0.5383 0.4422

0.1431 0.1797 0.0561 0.7122 -0.5151 0.7930

0.2749 0.4722 0.2308 -0.6636 1.1931 -0.5502


function [x]=sislin(A,b)

if nargin==0

error('Numero di dati in input insufficiente'

end

[n m]=size(A);

%controllo per il calcolo dell'inversa o delle soluzioni di m sistemi

%lineari


if nargin==1

b=eye(n);

elseif nargin==2

if size(b)~=n

error('b deve avere lo stesso numero di righe di A'

end

end

%controllo che la matrice A non sia di caratteri

if (ischar(A)==1)

error('A deve essere una matrice di reali'

end

%Controllo errore per dimensioni nulle

if isempty(A)

error ('La matrice è vuota,nulla da calcolare'

end

%Controllo per matrici non quadrate

if(n~=m)

error('Attenzione matrice non quadrata'

end

if isreal(A)==0

error('A deve essere una matrice di reali'

end

%controllo che la matrice b non sia di caratteri

if (ischar(b)==1|| isreal(b)==0)

error('b deve essere una matrice di reali'

end

zero=eps*norm(A,inf); %calcola lo zero per la verifica

piv=(1:n);

%ciclo di fattorizzazione LU con pivoting parziale e scambio virtuale delle

%righe

for k=1:(n-1)

r=min(find(abs(A(piv(1:n),k))==max(abs(A(piv(k:n),k))))); %cerca il pivotmaggiore in modulo

if abs(A(piv(r),k))>zero %controllo che il pivot considerato sia diverso da zero

piv([r k])=piv([k r]); %scambio virtuale delle righe

A(piv((k+1):n),k)=A(piv((k+1):n),k)/A(piv(k),k); %genera moltiplicatori, e lisalva in place

A(piv((k+1):n),(k+1):n)=A(piv((k+1):n),(k+1):n)-(A(piv((k+1):n),k)*A(piv(k),(k+1):n)); %sottrae riga a riga moltiplicata

else %altrimenti avvisa l'utente che la matrice è singolare

error ('Attenzione il sistema è singolare.Il programma verrà arrestato!'

end

end

if abs(A(piv(n),n))<=zero %verifica singolarità matrice dei coefficienti perl'ultimo valore

error('Attenzione sistema singolare su ultimo passo, Il programma verrà arrestato!'

end

t=size(b);

%ciclo per calcolo della soluzione per ogni vettore colonna

%della matrice dei termini noti


%forward substitution

y(1,:)=b(piv(1),:);

for i=2:n

y(i,:)=b(piv(i),:)-(A(piv(i),1:(i-1))*(y(1:(i-1),:)));

end

%back substitution

x(n,:)=y(n,:)/A(piv(n),n); %salvataggio dell'ultimo valore del vettore sol.

for i=(n-1):-1:1

x(i,:)=(y(i,:)-(A(piv(i),(i+1):n)*(x((i+1):n,:))))/A(piv(i),i);%calcolo dellesoluzioni

end




Test dell'algoritmo:

Caso funzionante1:

A=rand(4);

b=rand(4,6);

x=sislin(A,b)

x =

-0.2703 0.0620 0.0987 0.7654 -0.2380 0.8251

0.4077 0.4003 0.1056 0.4601 0.5383 0.4422

0.1431 0.1797 0.0561 0.7122 -0.5151 0.7930

0.2749 0.4722 0.2308 -0.6636 1.1931 -0.5502

Caso funzionante2:

>> A=rand(4);

>> x=sislin(A)

x =

-0.6950 2.6552 1.5099 -1.5902

1.3591 -0.0776 -0.4835 -0.1355

-0.1598 1.2550 -1.1877 0.9303

0.0773 -1.7939 0.8484 0.5416


Casi d'errore:

>> sislin

??? Error using ==> sislin at 32

Numero di dati in input insufficiente


>> A=rand(4);

>> b=rand(7,8);

>> sislin(A,b)

??? Error using ==> sislin at 42

b deve avere lo stesso numero di righe di A


>> sislin('ciao')

??? Error using ==> sislin at 48

A deve essere una matrice di reali


>> sislin([])

??? Error using ==> sislin at 52

La matrice è vuota,nulla da calcolare


>> sislin(rand(4,7))

??? Error using ==> sislin at 56

Attenzione matrice non quadrata


>> sislin(rand(4),'ciao')

??? Error using ==> sislin at 60

b deve essere una matrice di reali


>>A =


0.7184 0 0.0908 0.4401

0.9686 0 0.2665 0.5271

0.5313 0 0.1537 0.4574

0.3251 0 0.2810 0.8754


>> sislin(A)

??? Error using ==> sislin at 74

Attenzione il sistema è singolare. Il programma verrà arrestato!


>>A =


0.5181 0.2407 0.6951 0.6678

0.9436 0.6761 0.0680 0.8444

0.6377 0.2891 0.2548 0.3445

0 0 0 0 0


>> sislin(A)

??? Error using ==> sislin at 78

Attenzione sistema singolare su ultimo passo. Il programma verrà arrestato!


>> a=rand(10);

>> a=a+i;

>> sislin(a)

??? Error using ==> sislin at 61

A deve essere una matrice di reali


>> b=rand(10);

>> b=b+i;

>> sislin(rand(10),b);

??? Error using ==> sislin at 65

b deve essere una matrice di reali


Test per l'accuratezza:

Risoluzione m sistemi bencondizionati1:

>> a=rand(7);x=rand(7,9);b=a*x;

>> cond(a)

ans =

2.112908744886480e+001

>> xc=sislin(a,b);

>> norm(b-a*xc)/norm(a*xc)

ans =

8.913894804626601e-

>> err=norm(x-xc)/norm(x)

err =

1.392538378092079e-

Con una matrice bencondizionata, il residuo, che è nell'ordine dell'errore di round-off, dimostra che l'algoritmo trova una soluzione con la massima accuratezza. L'errore relativo anch'esso dell'ordine dell'errore di round off, invece, dimostra che la soluzione trovata è molto vicina a quella reale, con la perdita al massimo di un unica cifra significativa.


Risoluzione m sistemi bencondizionati2:

>> a=rand(10);

>> cond(a)

ans =

6.750871549975865e+001

>> xc=sislin(a);

>> ic=xc*a;

>> i=eye(10);

>> err=norm(i-ic)/norm(i)

err =

9.728661661915149e-015


L'errore relativo dimostra che anche per il calcolo dell'inversa l'algoritmo fornisce la soluzione con la massima accuratezza, con un errore al più sull'ultima cifra significativa.


Risoluzione m sistemi malcondizionati1:

>> a=hilb(10);x=rand(10,2);b=a*x;

>> cond(a)


ans =

1.602467527403655e+013

>> xc=sislin(a,b);

>> norm(b-a*xc)/norm(a*xc)

ans =

1.357295860779872e-016

>> err=norm(x-xc)/norm(x)

err =

2.668192003144126e-004

Anche questa volta, il residuo dell'ordine dell'errore di round off dimostra che l'algoritmo risolve il problema in modo accurato. Però l'errore relativo mostra che c'è stata una perdita di circa 12 cifre significative, questo perchè la matrice è malcondizionata, quindi la soluzione trovata è lontana da quella reale.



Risoluzione m sistemi malcondizionati2:

>> a=hilb(10);

>> cond(a);

>> ans

ans =

1.602467527403655e+013

>> xc=sislin(a);

>> ic=xc*a;

>> i=eye(10);

>> err=norm(i-ic)/norm(i)

err =

3.693850179255893e-003


Nel caso di una matrice malcondizionata, il calcolo dell'inversa subisce una perdita di 13 cifre significative.

Scarica gratis Funzione 'sislin'
Appunti su:



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...