next up previous   
Next: Function da 11 a 10 Up:Introduzione  Previous: Funzioni adoperate
Intro Gen: Introduzione Generale  Home: Home page

Selezione veloce:

 

1. Autpotinv.m

 

% METODO DELLE POTENZE INVERSE PER IL CALCOLO DEGLI AUTOVALORI

 

function [H,risp]=aupotinv(A,n,simmetrica);

% H           é l'autovalore da calcolare

% risp        controlla se il metodo é applicabile

% A           é la matrice in cui calcoliamo l'autovalore

% n            é la dimensione della matrice A

% simmetrica  tiene conto del fatto che A può essere simmetrica

 

lc=input('Inserisci il valore approssimato dell''autovalore da calcolare : ');

B=A-lc*eye(n);

if rank ( B )<n

   risp=1;

else

   if simmetrica==1

      [l,risp]=autminsi(B,n);

   else  

      [l,risp]=autmin(B,n);

   end

   if risp==0

      H=lc+l;

   else

      H=0;

   end

end

 

2. Autmax.m

 

% QUESTO ALGORITMO DETERMINA L'AUTOVALORE DI MODULO PIU' GRANDE DI UNA MATRICE

 

function l=autmaxmo(A,n);

% l           é l'autovalore da calcolare

% A         é la matrice in cui calcoliamo l'autovalore

% n          é la dimensione della matrice A

 

x=diag(eye(n));

Kmax=input('Introduci il numero massimo di iterate : ');

err=0;

while err==0

      if Kmax<=0 | round(Kmax)~=Kmax

         disp(' ');

         disp(' Il valore introdotto non é corretto');

         Kmax=input('Introducilo nuovamente : ');

      else

         err=1;

      end

end

for k=0:Kmax

    y=A*x;

    j=0;

    i=1;

    while j==0

          if abs(x(i))==1             

             j=i;

          end

          i=i+1;

    end

    l=y(j)/x(j);

    x=y/max(abs(y));

end

3. Autmaxsi.m

 

% QUESTO ALGORITMO DETERMINA L' AUTOVALORE DI MODULO PIU' GRANDE DI UNA MATRICE                                    % SIMMETRICA

 

function l=autsimm(A,n);

% l           é l'autovalore da calcolare

% A         é la matrice in cui calcoliamo l'autovalore

% n          é la dimensione della matrice A

 

x=diag(eye(n));

Kmax=input('Introduci il numero massimo di iterate : ');

err=0;

while err==0

      if Kmax<=0 | round(Kmax)~=Kmax

         disp(' ');

         disp(' Il valore introdotto non é corretto');

         Kmax=input('Introducilo nuovamente : ');

      else

         err=1;

      end

end

for k=0:Kmax

    y=A*x;

    l=(x'*y)/(norm(x))^2;

    x=y/norm(y);

end

4. Autmetqr.m

 

% CALCOLO DEGLI AUTOVALORI DI UNA MATRICE CON IL METODO QR

 

function l=autmetqr(A,n);

% l           é il vettore con tutti gli autovalori da calcolare

% A         é la matrice in cui calcoliamo l'autovalore

% n          é la dimensione della matrice A

 

kmax=input('Introduci il numero massimo di iterate : ');

err=0;

while err==0

      if kmax<=0 | round(kmax)~=kmax

         disp(' ');

         disp(' Il valore introdotto non é corretto');

         kmax=input('Introducilo nuovamente : ');

      else

         err=1;

      end

end

i=1;

while i<=kmax

    [Q,R,risp]=fattqr(A,n,n);                                           % Calcolo della fattorizzazione QR

    if risp==0                                                                  % ad ogni passo

       A=R*Q;

       i=i+1;

    else

       l=0;

       i=kmax+1;

    end

end

if risp==0

i=2;

while i<=n

    if abs(A(i,i-1))>=eps

       b=A(i-1,i-1)+A(i,i);

       c=A(i-1,i-1)*A(i,i)-A(i-1,i)*A(i,i-1);

       Delta=sqrt(b*b-4*c);

       l(i-1)=(b-Delta)/2;                                                 % estrapolazione dalla matrice

       l(i)=(b+Delta)/2;                                                    % ottenuta all'ultima iterata

       i=i+2;

    else

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

       if i==n

          l(i)=A(i,i);

       end

       i=i+1;

    end

end

if i==n+1

   l(n)=A(n,n);

end

end

5. Autmin.m

 

% QUESTO ALGORITMO DETERMINA L'AUTOVALORE DI MODULO PIU' PICCOLO DI UNA MATRICE

 

function [l,risp]=autminmo(A,n);

% l           é l'autovalore da calcolare

% risp      controlla se il metodo é applicabile

% A         é la matrice in cui calcoliamo l'autovalore

% n          é la dimensione della matrice A

 

risp=0;

[L,U,risp]=lucompat(A,n);                                                % Calcolo della fattorizzazione LU

if risp==0

   x=diag(eye(n));

   Kmax=input('Introduci il numero massimo di iterate : ');

   err=0;

   while err==0

         if Kmax<=0 | round(Kmax)~=Kmax

            disp(' ');

            disp(' Il valore introdotto non é corretto');

            Kmax=input('Introducilo nuovamente : ');

         else

            err=1;

         end

   end

   for k=0:Kmax

       y=lurisol(L,U,x,n);

       j=0;

       i=1;

       while j==0

             if abs(x(i))==1             

                j=i;

             end

             i=i+1;

       end  

       l=y(j)/x(j);

       x=y/max(abs(y));

   end

   l=1/l;

end

6. Autminsi.m

 

% QUESTO ALGORITMO DETERMINA L'AUTOVALORE DI MODULO PIU' PICCOLO DI UNA MATRICE        % SIMMETRICA

 

function [l,risp]=autminsi(A,n);

% l           é l'autovalore da calcolare

% risp      controlla se il metodo é applicabile

% A         é la matrice in cui calcoliamo l'autovalore

% n          é la dimensione della matrice A

 

risp=0;

fc=1;

[L,U,C,risp,r]=lusimm(A,n,fc);                                         % fattorizzazione LU per matrici simmetriche

if risp==0

   x=diag(eye(n));

   Kmax=input('Introduci il numero massimo di iterate : ');

   err=0;

   while err==0

         if Kmax<=0 | round(Kmax)~=Kmax

            disp(' ');

            disp(' Il valore introdotto non é corretto');

            Kmax=input('Introducilo nuovamente : ');

         else

            err=1;

         end

   end

   for k=0:Kmax

       y=lurisol(L,U,x,n);

       l=(x'*y')/(norm(x))^2;

       x=y'/norm(y);

   end

   l=1/l;

end

7. Auttrsim.m

 

% CALCOLO DI TUTTI GLI AUTOVALORI REALI DELLE MATRICI TRIDIAGONALI SIMMETRICHE

 

function l=auttrsim(A,n,e);

% l           é l'autovalore da calcolare

% A         é la matrice in cui calcoliamo l'autovalore

% n          é la dimensione della matrice A

% e           é l'errore massimo che si deve commettere

 

inf1(1)=A(1,1)-abs(A(1,2));

sup1(1)=A(1,1)+abs(A(1,2));

for i=2:n-1                                                                          % calcolo dell'intervallo contenente

    k=abs(A(i,i-1))+abs(A(i,i+1));                                      % tutti gli autovalori della matrice

    inf1(i)=A(i,i)-k;

    sup1(i)=A(i,i)+k;

end

inf1(n)=A(n,n)-abs(A(n,n-1));

sup1(n)=A(n,n)+abs(A(n,n-1));

inf1=min(inf1);

sup1=max(sup1);

k=(log((sup1-inf1)/e))/log(2);                                           % calcolo del numero di iterate da effettuare

k=ceil(k);

for i=1:n

    inf2=inf1;                                                                       % determinazione di tutti gli

    sup2=sup1;                                                                    % autovalori della matrice

    for j=1:k

        c=(inf2+sup2)/2;

        w=camsegn(A,n,c);

        if w>=i

           sup2=c;

        else

           inf2=c;

        end

    end

    l(i)=(inf2+sup2)/2;

end

 

8. Camsegn.m  

% CALCOLO DEL NUMERO DI CAMBIAMENTI DI SEGNO DELLA SUCCESSIONE DI STURM

 

function w=camsegn(A,n,x);

% w       rappresenta il numero di cambiamenti di segno della successione di Sturm calcolata in x

% A       é la matrice triangolare simmetrica per la quale calcoliamo tale successione

% n        é la dimensione della matrice A

% x        punto in cui calcoliamo la successione di Sturm

 

p(1)=1;

p(2)=A(1,1)-x;

if p(2)==0

   p(2)=1;

end

for i=3:n+1

    p(i)=(A(i-1,i-1)-x)*p(i-1)-((A(i-1,i-2))^2)*p(i-2);

    if p(i)==0

       p(i)=p(i-1);

    end

end

w=0;

for i=2:n+1

    if p(i)*p(i-1)<0

       w=w+1;

    end

end

 

9. Chocomp.m

 

% FATTORIZZAZIONE DI CHOLESKY CON LA TECNICA COMPATTA

 

function L=chocomp(A,n);

% L       matrice ottenuta dalla fattorizzazione di Cholesky

% A      matrice da fattorizzare

% n       dimensione della matrice

 

for i=1:n

    for j=1:i-1

        a=0;

        for k=1:j-1

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

        end

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

    end

    a=0;

    for k=1:i-1

        a=a+(L(i,k))^2;

    end

    L(i,i)=sqrt(A(i,i)-a);

end

 

10. Chodool.m

 

% FATTORIZZAZIONE DI CHOLESKY CON IL METODO DI DOOLITTLE

 

function L=chodool(A,n);

% L     matrice ottenuta dalla fattorizzazione di Cholesky

% A    matrice da fattorizzare

% n     dimensione della matrice

 

for j=1:n

    a=0;

    for k=1:j-1

        a=a+(L(j,k))^2;

    end

    L(j,j)=sqrt(A(j,j)-a);

    for i=j+1:n

        a=0;

        for k=1:j-1

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

        end

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

    end

end  


next up previous   
Next: Function da 11 a 10 Up:Introduzione  Previous: Funzioni adoperate
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
8-5-2000

HyperCounter
BPath Contatore