next up previous   
Next: Function da 21 a 30 Up:Introduzione  Previous: Function da 1 a 10
Intro Gen: Introduzione Generale  Home: Home page

Selezione veloce: 

                

11. Eulespl.m

 

% METODO DI EULERO ESPLICITO PER LA RISOLUZIONE DELLE EQUAZIONI DIFFERENZIALI

 

function y=eulespl(F,t,y,n,h);

% y      vettore soluzione dell'equazione differenziale

% F      é la funzione a due variabili F(t,y)

% n      é il numero di suddivisioni dell'intervallo [a,b] fissato

% h      é l'ampiezza delle n suddivisioni

 

for i=2:n+1

    y(i)=y(i-1)+h*feval(F,t(i-1),y(i-1));

end

 

12.    Eulimpl.m

 

% METODO DI EULERO IMPLICITO PER LA RISOLUZIONE DELLE EQUAZIONI DIFFERENZIALI

function [y,risp]=eulimpl(F,G,t,y,n,h,e);

% y          vettore soluzione dell'equazione differenziale

% risp      controlla se il metodo é applicabile

% F          é la funzione a due variabili F(t,y)

% G         é la derivata di F

% t           é la variabile indipendente della funzione y

% n          é il numero di suddivisioni dell'intervallo [a,b] fissato

% h          é l'ampiezza delle n suddivisioni

% e          é l'errore massimo che si deve commettere  

 

risp=0;

i=2;

while i<=n+1 & risp==0

    sol1=y(i-1);

    wd=feval(G,t(i),sol1);

    if wd==1/h

       risp=1;

    else

       wf=sol1-y(i-1)-h*(feval(F,t(i),sol1));

       sol2=sol1-wf/(1-h*wd);

    end

    while risp==0 & (abs(sol2-sol1))>=e | (abs(wf)>=e)

       sol1=sol2;

       wd=feval(G,t(i),sol1);

       if wd==1/h

          risp=1;

       else

          wf=sol1-y(i-1)-h*feval(F,t(i),sol1);

          sol2=sol1-wf/(1-h*wd);

       end

    end

    y(i)=sol2;

    i=i+1;

end

 

13.    Fattqr.m

 

% FATTORIZZAZIONE QR

 

function [Q,R,risp]=fattqr(A,m,n);

% Q ,R     sono le matrici ottenute dalla fattorizzazione

% A        matrice da fattorizzare

% n ,m     dimensioni della matrice

 

risp=0;

R=A;

Q=eye(m);

if risp==0

 for k=1:n

    c=sign(R(k,k));

    if c==0

       c=1;

    end

    a=0;                                                                                 % calcolo della norma del vettore R(k:m,k)

    for i=k:m

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

    end

    a=sqrt(a);                                                                         % calcolo delle matrici Q(k) e R(k)

    b=a*(abs(R(k,k))+a);

    if b==0

       risp=1;

    else

       b=1/b;

       u=1;

       u(1)=R(k,k)+c*a;

       u(2:m-k+1)=R(k+1:m,k);

       P=eye(m-k+1,m-k+1)-b*u'*u;

       S=0;

       if k>1

          S(1:k-1,1:k-1)=eye(k-1,k-1);

       end

       S(k:m,k:m)=P;

       R(k:m,k:n)=P*R(k:m,k:n);

       Q=S*Q;

    end

 end

else

 Q=0;

 R=0;

end

Q=Q';

 

 

 

14. Gauss.m

 

    % METODO DI GAUSS

 

function [x,risp]=gauss(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

 

risp=0;

if b==zeros(n,1);

   x=zeros(n,1);

else

   k=1;

   while k<n

     if A(k,k)==0

        risp=1;

        k=n;

     end

     if risp==0          

        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);         

           for j=1:k

               A(i,j)=0;

           end

        end 

     end

     k=k+1;

   end       

 

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

 

   if risp==0

      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

   end

end

if risp==1

   x=0;

end

15. Intherm.m

 

% INTERPOLAZIONE DI HERMITE

 

function P=intherm(x,y,z,xi,n,m);

% P     vettore soluzione dei punti da interpolare

% x     vettore dei nodi interpolanti

% y     valori della funzione nei nodi x

% z     valori della derivata prima della funzione nei nodi x

% xi    vettore dei punti in cui calcolare la funzione interpolante

% n     dimensione di x , y e z

% m    dimensione di xi

 

for ki=1:m

    p=0;

    for k=1:n

        a=1;

        c=1;

        for i=1:k-1

            c=c*(x(k)-x(i));

            a=a*(xi(ki)-x(i));

        end

        for i=k+1:n

            c=c*(x(k)-x(i));

            a=a*(xi(ki)-x(i));

        end

        a=a/c;

 

%   Calcolo della derivata prima dei polinomi fondamentali

      

        l=0;

        for j=1:n

            if j~=k

               d=1;

               for i=1:n

                   if i~=k

                      if i~=j

                         d=d*(x(k)-x(i));

                      end

                   end

               end

               l=l+d;

            end

        end

        l=l/c;

        p=p+a*a*(y(k)+(z(k)-2*l*y(k))*(xi(ki)-x(k)));

    end

    P(ki)=p;

end

P=P';

16. Intlagr.m

 

% INTERPOLAZIONE DI LAGRANGE

 

function L=intlagr(x,y,xi,n,m);

% L     vettore soluzione dei punti da interpolare

% x     vettore dei nodi interpolanti

% y     valori della funzione nei nodi x

% xi    vettore dei punti in cui calcolare la funzione interpolante

% n     dimensione di x , y

% m    dimensione di xi

 

q=1;                                                                                    % ordinamento dei nodi

while q==1

      q=0;

      for i=1:n-1

          if x(i)>x(i+1)

             u=x(i);

             x(i)=x(i+1);

             x(i+1)=u;

             u=y(i);

             y(i)=y(i+1);

             y(i+1)=u;

             q=1;

          end

       end

end

for i=1:m                                                                            % interpolazione di Lagrange          

    L(i)=0;

    for k=1:n

        a=1;

        for j=1:k-1

            a=a*((xi(i)-x(j))/(x(k)-x(j)));

        end

        for j=k+1:n

            a=a*((xi(i)-x(j))/(x(k)-x(j)));

        end

        L(i)=L(i)+a*y(k);

    end

end

L=L';

asc=x(1):.1:x(n);                                                                % Algoritmo seguente utilizzato

[h,m2]=size(asc);                                                               % unicamente per tracciare il grafico

for i=1:m2

    ord(i)=0;

    for k=1:n

        a=1;

        for j=1:k-1

            a=a*((asc(i)-x(j))/(x(k)-x(j)));

        end

        for j=k+1:n

            a=a*((asc(i)-x(j))/(x(k)-x(j)));

        end

        ord(i)=ord(i)+a*y(k);

    end

end

plot(asc,ord,'w',xi,L,'+r',x,y,'og');

title('Interpolazione di Lagrange');

17. Intminqu.m

 

% APPROSSIMAZIONE POLINOMIALE AI MINIMI QUADRATI

 

function [p,risp]=intminqu(x,y,xi,n,m,w);

% p        vettore soluzione dei punti da interpolare

% risp    controlla se il metodo é applicabile

% x        vettore dei nodi interpolanti

% y        valori della funzione nei nodi x

% xi       vettore dei punti in cui calcolare la funzione interpolante

% n        dimensione di x , y

% w       dimensione di xi

% m       grado del polinomio interpolante

 

B=diag(eye(n));                                                                 % determinazione della matrice

for i=1:n                                                                             % dei coefficienti del sistema

   for j=2:m                                                                        % da risolvere

       B(i,j)=(x(i))^(j-1);

   end

end

[a,f,risp]=minquad(B,y,n,m);

if risp==0

a=a';

for i=1:w                                                                            % regola di Horner per valutare

    p(i)=0;                                                                            % il polinomio interpolante

    p(i)=valpol(xi(i),a);                                                        % nei nodi

end

asc=x(1):.1:x(n);                                                               % Algoritmo seguente utilizzato

[h,m2]=size(asc);                                                              % unicamente per tracciare il grafico

for i=1:m2

    ord(i)=0;

    for j=m:-1:1

        ord(i)=ord(i)*asc(i)+a(j);

    end

end

plot(asc,ord,'w',xi,p,'+r',x,y,'og');

title('Approssimazione polinomiale');

else

p=0;

end

18. Intnevil.m

 

% INTERPOLAZIONE CON SCHEMA DI NEVILLE

 

function z=intnevil(x,y,xi,n,m);

% z      vettore soluzione dei punti da interpolare

% x      vettore dei nodi interpolanti

% y      valori della funzione nei nodi x

% xi     vettore dei punti in cui calcolare la funzione interpolante

% n      dimensione di x , y

% m     dimensione di xi

 

for k=1:m

    L=0;

    for i=1:n

        L(i,1)=y(i);

    end

    for j=2:n

        for i=j:n

            L(i,j)=(L(i,j-1)*(xi(k)-x(i-j+1))-L(i-1,j-1)*(xi(k)-x(i)))/(x(i)-x(i-j+1));

        end

    end

    z(k)=L(n,n);

end

asc=x(1):.1:x(n);                                                               % Algoritmo seguente utilizzato

[h,m2]=size(asc);                                                              % unicamente per tracciare il grafico

for k=1:m2

    L=0;

    for i=1:n

        L(i,1)=y(i);

    end

    for j=2:n

        for i=j:n

            L(i,j)=(L(i,j-1)*(asc(k)-x(i-j+1))-L(i-1,j-1)*(asc(k)-x(i)))/(x(i)-x(i-j+1));

        end

    end

    ord(k)=L(n,n);

end

plot(asc,ord,'w',xi,z,'+r',x,y,'og');

title('Interpolazione con schema di Neville');

 

19. Intnewt.m

 

% INTERPOLAZIONE DI NEWTON

 

function L=intnewt(x,y,xi,n,m);

% L      vettore soluzione dei punti da interpolare

% x      vettore dei nodi interpolanti

% y      valori della funzione nei nodi x

% xi     vettore dei punti in cui calcolare la funzione interpolante

% n      dimensione di x , y

% m     dimensione di xi

 

for i=1:n

    F(i,1)=y(i);

end

for k=1:m

    for j=2:n

        for i=j:n

            F(i,j)=(F(i,j-1)-F(i-1,j-1))/(x(i)-x(i-j+1));

        end

    end

    L(k)=F(1,1);

    w=1;

    for i=2:n

        w=w*(xi(k)-x(i-1));

        L(k)=L(k)+F(i,i)*w;

    end

end

asc=x(1):.1:x(n);                                                                % Algoritmo seguente utilizzato

[h,m2]=size(asc);                                                               % unicamente per tracciare il grafico

for k=1:m2

    for j=2:n

        for i=j:n

            F(i,j)=(F(i,j-1)-F(i-1,j-1))/(x(i)-x(i-j+1));

        end

    end

    ord(k)=F(1,1);

    w=1;

    for i=2:n

        w=w*(asc(k)-x(i-1));

        ord(k)=ord(k)+F(i,i)*w;

    end

end

plot(asc,ord,'w',xi,L,'+r',x,y,'og');

title('Interpolazione di Newton');

20. Jacobi.m

 

% METODO DI JACOBI PER LA RISOLUZIONE DI SISTEMI LINEARI

 

function [x,risp]=jacobi(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

 

risp=0;

for i=1:n

    D(i,i)=1/A(i,i);

end

disp('Per una verifica molto precisa sulla convergenza del metodo iterativo ');

disp('adottato introdurre un valore abbastanza elevato del seguente numero ');

D=eye(n)-D*A;

l=autmax(D,n);

if abs(l)>=1

   risp=1;

   x=0;

else

   Kmax=input('Introduci il numero massimo di iterate per applicare il metodo di Jacobi : ');

   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

   x=diag(eye(n));

   for k=1:Kmax

       for i=1:n

           a=0;

           for j=1:i-1

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

           end

           for j=i+1:n

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

           end

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

       end

   end

end  


next up previous   
Next: Function da 21 a 30 Up:Introduzione  Previous: Function da 1 a 10
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
8-5-2000

HyperCounter
BPath Contatore