next up previous   
Next: Function da 31 a 38 Up:Introduzione  Previous: Function da 11 a 20
Intro Gen: Introduzione Generale  Home: Home page

Selezione veloce:

              

21. Lucompat.m

 

% FATTORIZZAZIONE LU CON TECNICA COMPATTA

 

function [L,U,risp]=lucompat(A,n);

% L U      matrici ottenute dalla fattorizzazione LU

% risp      controlla se il metodo é applicabile

% A         matrice da fattorizzare

% n          dimensione della matrice

 

risp=0;

U=A(1,:);

L=eye(n,n);

i=2;

while i<=n

    for j=1:i-1

        if U(j,j)==0

           risp=1;

           j=n+1;

           i=n+1;

        end

        if risp==0

           a=0;

           for k=1:j-1    

               a=a+L(i,k)*U(k,j);

           end

           L(i,j)=(1/U(j,j))*(A(i,j)-a);

        end

    end

    for j=i:n

        a=0;

        for k=1:i-1

            a=a+L(i,k)*U(k,j);

        end

        U(i,j)=A(i,j)-a;

    end

    i=i+1;

end

22. Ludimost.m

 

% FATTORIZZAZIONE LU

% UTILIZZANDO LA SEGUENZA DI PASSI DEL TEOREMA DI ESISTENZA ED UNICITA' DELLA STESSA

 

function [L,U,risp]=ludimost(A,n);

% L,U   matrici ottenute dalla fattorizzazione LU

% risp   controlla se il metodo é applicabile

% A      matrice da fattorizzare

% n       dimensione della matrice

 

risp=0;

L(1,1)=1;

U(1,1)=A(1,1);

k=2;

while k<=n

    if U(k-1,k-1)==0

       risp=1;

       k=n+1;

    end

    if risp==0

       L(k,1)=A(k,1)/U(1,1);                                                 % RISOLUZIONE DEL SISTEMA l'* Un-1 = r'

       for i=2:k-1

           a=0;

           for j=1:i-1

               a=a+U(j,i)*L(k,j);

           end

           L(k,i)=(A(k,i)-a)/U(i,i);

       end

       L(k,k)=1;                                                                      % RISOLUZIONE DEL SISTEMA c = Ln-1 * u :

       U(1,k)=A(1,k)/L(1,1);

       for i=2:k-1

           a=0;

           for j=1:i-1

               a=a+L(i,j)*U(j,k);

           end

           U(i,k)=(A(i,k)-a)/L(i,i);

       end

       U(k,k)=A(k,k)-L(k,1:k-1)*U(1:k-1,k);

    end

    k=k+1;

end

if risp==1

   L=0;

   U=0;

end

23. Ludoolit.m

 

% FATTORIZZAZIONE LU CON METODO DI DOOLITTLE

 

function [L,U,risp]=ludoolit(A,n);

% L U   matrici ottenute dalla fattorizzazione LU

% risp  controlla se il metodo é applicabile

% A     matrice da fattorizzare

% n     dimensione della matrice

 

risp=0;

U=A(1,:);

L=eye(n,n);

j=1;

while j<n

    if U(j,j)==0

       risp=1;

       j=n;

    end

    if risp==0

     for i=j+1:n       

         a=0;

         for k=1:j-1

             a=a+L(i,k)*U(k,j);

         end

         L(i,j)=(1/U(j,j))*(A(i,j)-a);

     end

     for i=2:j+1

         a=0;

         for k=1:i-1

             a=a+L(i,k)*U(k,j+1);

         end

         U(i,j+1)=A(i,j+1)-a;

     end

    end

    j=j+1;

end

if risp==1

   L=0;

   U=0;

end

24. Lugauss.m

 

% FATTORIZZAZIONE LU UTILIZZANDO IL METODO DI ELIMINAZIONE DI GAUSS

 

function [L,U,risp]=lugauss(A,n);

% L U     matrici ottenute dalla fattorizzazione LU

% risp     controlla se il metodo é applicabile

% A        matrice da fattorizzare

% n         dimensione della matrice

 

risp=0;

L=eye(n,n);

U=A;

k=1;

while k<n

    if U(k,k)==0

       risp=1;

       k=n;

    end

    if risp==0          

       for i=k+1:n

           for j=k+1:n

               L(i,k)=U(i,k)/U(k,k);

               U(i,j)=U(i,j)-L(i,k)*U(k,j);

           end      

           for j=1:k

               U(i,j)=0;

           end

        end 

    end

    k=k+1;

end        

if risp==1

   x=0;

end

 

25. Lupivpar.m

 

% RISOLUZIONE DI SISTEMI LINEARI CON STRATEGIA DI PIVOTING PARZIALE

 

function x=lupivpar(A,b,n);

% x     vettore soluzione del sistema

% A     vettore dei coefficienti del sistema

% b     vettore dei termini noti

% n     dimensione di A

 

for k=1:n-1

    max=0;

    j=0;

    for i=k:n                                                                         % ricerca dell'elemento

        if abs(A(i,k))>max                                                    % di massimo modulo sulla

           max=abs(A(i,k));                                                   % prima colonna del minore

           j=i;                                                                          % A(k,k)

        end

    end

    if k~=j                                                                            % scambio di righe

       u=A(k,:);

       A(k,:)=A(j,:);

       A(j,:)=u;

       u=0;

       u=b(k);

       b(k)=b(j);

       b(j)=u;

    end

    for i=k+1:n

        for j=k+1:n

            L=A(i,k)/A(k,k);

            A(i,j)=A(i,j)-L*A(k,j);

        end

        b(i)=b(i)-L*b(k);         

    end

end

 

% APPLICAZIONE DEL METODO DI GAUSS PER LA RICERCA DEL VETTORE X:

 

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

    a=0;

    for j=i+1:n

        a=a+A(i,j)*x(j);

    end

    x(i)=(b(i)-a)/A(i,i);

end

26. Lupivtot.m

 

% RISOLUZIONE DI SISTEMI LINEARI CON STRATEGIA DI PIVOTING TOTALE

 

function x=lupivtot(A,b,n);

% x        vettore soluzione del sistema

% risp    controlla se il metodo é applicabile

% A       vettore dei coefficienti del sistema

% b        vettore dei termini noti

% n        dimensione di A

 

for k=1:n-1

    max=0;                                                                           % Ricerca dell'elemento massimo

    for i=k:n                                                                          % della matrice A(k,k)

        for j=k:n

            if abs(A(i,k))>max

               max=abs(A(i,k));

               y=i;

               z(k)=j;

            end

        end

    end

    if k~=y                                                                            % Scambio di righe

       u=A(k,:);

       A(k,:)=A(y,:);

       A(y,:)=u;

       u=0;

       u=b(k);

       b(k)=b(y);

       b(y)=u;

    end

    if k~=z(k)                                                                        % Scambio di colonne

       u=0;

       u=A(:,k);

       A(:,k)=A(:,z(k));

       A(:,z(k))=u;

    end

    for i=k+1:n

        for j=k+1:n

            L=A(i,k)/A(k,k);

            A(i,j)=A(i,j)-L*A(k,j);

        end

        b(i)=b(i)-L*b(k);         

    end

end

 

% APPLICAZIONE DEL METODO DI GAUSS PER LA RICERCA DEL VETTORE X:

 

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

    a=0;

    for j=i+1:n

        a=a+A(i,j)*x(j);

    end

    x(i)=(b(i)-a)/A(i,i);

end

u=0;

 

for i=1:n-1                                                                          % ordinamento del vettore soluzione

    if i~=z(i)

       u=x(i)

       x(i)=x(z(i));

       x(z(i))=u;

    end

end

27. Lurischo.m

 

% RISOLUZIONE DEI SISTEMI LINEARI IN CUI E' STATA CALCOLATA LA FATTORIZZAZIONE DI           % CHOLESKY

 

function x=lurischo(L,b,n);

% x     vettore soluzione del sistema

% L     vettore dei coefficienti del sistema

% b     vettore dei termini noti

% n     dimensione di A

 

U=L';

y(1)=b(1)/L(1,1);                                                                % RISOLUZIONE DEL SISTEMA L * y = b

for i=2:n

    a=0;

    for j=1:i-1

        a=a+L(i,j)*y(j);

    end

    y(i)=(b(i)-a)/L(i,i);

end

x(n)=y(n)/U(n,n);                                                              % RISOLUZIONE DEL SISTEMA U * x = y

for i=n-1:-1:1

    a=0;

    for j=i+1:n

        a=a+U(i,j)*x(j);

    end

    x(i)=(y(i)-a)/U(i,i);

end

28. Lurisol.m

 

% RISOLUZIONE DEI SISTEMI LINEARI IN CUI E' STATA CALCOLATA LA FATTORIZZAZIONE LU

 

function x=lurisol(L,U,b,n);

% x        vettore soluzione del sistema

% L,U    fattorizzazione LU della matrice dei coefficienti del sistema

% b        vettore dei termini noti

% n        dimensione di A

 

y(1)=b(1);                                                                           % RISOLUZIONE DEL SISTEMA L * y = b

for i=2:n

    a=0;

    for j=1:i-1

        a=a+L(i,j)*y(j);

    end

    y(i)=b(i)-a;

end

x(n)=y(n)/U(n,n);                                                               % RISOLUZIONE DEL SISTEMA U * x = y

for i=n-1:-1:1

    a=0;

    for j=i+1:n

        a=a+U(i,j)*x(j);

    end

    x(i)=(y(i)-a)/U(i,i);

end

 

29. Lusimm.m

 

% FATTORIZZAZIONE LU PER LE MATRICI SIMMETRICHE

 

function [L,U,C,risp,r]=lusimm(A,n,fc);

% L,U     matrici ottenute dalla fattorizzazione LU

% C         matrice ottenuta dalla fattorizzazione di Cholesky

% risp      controlla se il metodo é applicabile

% r           indica se si vuole o meno calcolare la fattorizzazione di Cholesky

% A         matrice da fattorizzare

% n          dimensione della matrice

% fc         considera o meno l'intero algoritmo del calcolo della fattorizzazione di Cholesky

 

risp=0;

C=0;

U=triu(A);

L=eye(n);

p=0;

k=1;

while k<n

    if U(k,k)==0

       risp=1;

       k=n;

    else

       if U(k,k)<0

          p=1;

       end

       for i=k+1:n

           L(i,k)=U(k,i)/U(k,k);       

           for j=i:n

               U(i,j)=U(i,j)-L(i,k)*U(k,j);

           end

       end

    end

    k=k+1;

end

if U(n,n)<0

   p=1;

end

r=0;

if p==1 & risp==0 & fc==0

   disp('La matrice non é anche definita positivamente');

   disp('per cui non é fattorizzabile secondo CHOLESKI');

   r=0;

end

if p==0 & risp==0 & fc==0

     disp('La matrice puo'' essere fattorizzabile secondo CHOLESKY');

     r=input('vuoi calcolarla? (se SI premere '' 1 '') : ');

end

if r==1

   for k=1:n

       D(k,k)=sqrt(U(k,k));

   end

   C=L*D;

else

   C=0;

End

 

30. Lutrid.m

 

% FATTORIZZAZIONE LU PER MATRICI TRIDIAGONALI

 

function [L,U,risp]=lutrid(A,n);

% L,U     matrici ottenute dalla fattorizzazione LU

% risp      controlla se il metodo é applicabile

% A         matrice da fattorizzare

% n          dimensione della matrice

 

risp=0;

U(1,1)=A(1,1);

L(1,1)=1;

i=2;

while i<=n

    if U(i-1,i-1)==0

       risp=1;

       i=n+1;

    end

    if risp==0

       L(i,i)=1;

       L(i,i-1)=A(i,i-1)/U(i-1,i-1);

       U(i-1,i)=A(i-1,i);

       U(i,i)=A(i,i)-L(i,i-1)*U(i-1,i);

    end

    i=i+1;

end

if risp==1

   L=0;

   U=0;

end  


next up previous   
Next: Function da 31 a 38 Up:Introduzione  Previous: Function da 11 a 20
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
8-5-2000

 

HyperCounter
BPath Contatore