next up previous   
Next: Calcolo degli zeri di una funzione Up:Introduzione  Previous: Calcolo degli Autovalori di una matrice
Intro Gen: Introduzione Generale  Home: Home page

Interpol.m

 

% INTERPOLAZIONE DI FUNZIONI

 

help interpol;

z=1;

risp=0;

dom=0;

while dom==0

   clear;

   dom=0;

   disp('Scegli il tipo di interpolazione : ');

   disp('1. Interpolazione di Lagrange');

   disp('2. Interpolazione di Newton');

   disp('3. Utilizzando lo schema di Neville');

   disp('4. Interpolazione di Hermite');

   disp('5. Interpolazione con spline lineari');

   disp('6. Interpolazione con spline cubiche naturali');

   disp('7. Interpolazione con spline cubiche complete');

   disp('8. Approssimazione polinomiale ai minimi quadrati');

   s=input('Introduci il numero corrispondente : ');

   err=0;

   while err==0

         if s~=1 & s~=2 & s~=3 & s~=4 & s~=5 & s~=6 & s~=7 & s~=8

            s=input('Il valore introdotto é errato.Introducilo di nuovo : ');

         else

            err=1;

         end

   end

   disp('Introduci : ');

   err=0;

   while err==0

         x=input('- il vettore colonna dei nodi interpolanti : ');

         [n,h]=size(x);

         if h~=1

            disp('Non é stato introdotto un vettore colonna.Ricomincia');

            disp('Introduci : ');

         else

            if n<=1

               disp('I nodi devono essere almeno 2.Introduci nuovamente : ');

            else

               err=1;

            end

         end

   end

   non=0;

   if s==6 | s==7

      if n<3

         disp('Per applicare questo metodo i nodi devono essere almeno 3');

         disp('Fissare più nodi o adoperare un altro metodo :');

         non=1;

         risp=1;

      end

   end

   if non==0;

     err=0;

     while err==0

           y=input('- il vettore colonna dei corrispondenti valori della funzione : ');

           [c,h]=size(y);

           if n~=c | h~=1

              disp('ATTENZIONE : deve avere le stesse dimensioni dell''altro vettore.RICOMINCIA');

              disp('Introduci : ');

           else

              err=1;

           end

     end

     if s==4

        err=0;

        while err==0

           z=input('- il vettore colonna con corrispondenti valori delle derivate prime : ');

           [t,h]=size(z);

           if t~=n | h~=1

              disp('ATTENZIONE : deve avere le stesse dimensioni dei primi 2 vettori.RICOMINCIA');

              disp('Introduci : ');

           else

              err=1;

           end

        end

     end

     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;

               if s==4

                  u=z(i);

                  z(i)=z(i+1);

                  z(i+1)=u;

               end

               q=1;

            end

        end

     end

     graf=input('Se conosci la funzione f corrispondente ai punti introdotti premere "1" : ');

     if graf==1

        err=0;

        while err==0

              disp('Introduci : ');

              F=input('- Il nome della function contenente la funzione : ','s');

              if exist(F)==0

                 disp('La funzione introdotta non esiste,introduci : ');

              else

                 err=1;

              end

        end

     end

     err=0;

     while err==0

    xi=input('- il vettore colonna con i punti nei quali calcolare la funzione interpolante : ');

           [c,h]=size(xi);

           if h~=1

              disp('Non é stato introdotto un vettore colonna.Ricomincia');

              disp('Introduci : ');

           else

              if min(xi)<min(x) | max(xi)>max(x);

                 disp('Non conviene eseguire estrapolazioni.Ricomincia');

                 disp('Introduci : ');

              else

                 err=1;

              end

           end

     end

     risp=0;

     if s==1                                     % Interpolazione di Lagrange

        L=intlagr(x,y,xi,n,c);

        dom=1;

     end

     if s==2                                     % Interpolazione di Newton

        L=intnewt(x,y,xi,n,c);

        dom=1;

        L=L';

     end

     if s==3                                     % Utilizzando lo schema di Neville

        L=intnevil(x,y,xi,n,c);

        dom=1;

        L=L';

     end

     if s==4                                     % Interpolazione di Hermite   

        L=intherm(x,y,z,xi,n,c);

        asc=x(1):.07:x(n);

        asc=asc';

        [m2,h]=size(asc);

        ord=intherm(x,y,z,asc,n,m2);

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

        title('Interpolazione di Hermite');

        dom=1;

        ord=0;

     end

     if s==5                                     % Interpolazione con spline lineari

        L=spllin(x,y,xi,n,c);

        dom=1;

     end

     if s==6                                     % Interpolazione con spline cubiche naturali

        [L,risp]=splcubna(x,y,xi,n,c);

        if risp==1

           disp('Non é possibile fare questo tipo di interpolazione');

           disp('adoperane un altro : ');

        else

           dom=1;

        end

     end

     if s==7                                     % Interpolazione con spline cubiche complete

        k0=input('- il valore della derivata prima nel nodo più piccolo fissato : ');

        k1=input('- il valore della derivata prima nel nodo più grande fissato : ');

        [L,risp]=splcubco(x,y,xi,n,c,k0,k1);

        if risp==1

           disp('Non é possibile fare questo tipo di interpolazione');

           disp('adoperane un altro : ');

        else

           dom=1;

        end

     end

     if s==8                                     % Approssimazione polinomiale ai minimi quadrati

        err=0;

        while err==0

         m=input('- Il grado del polinomio interpolante (minore del numero di nodi introdotto) : ');

         if m>n | round(m)~=m

 disp('Il grado del polinomio interpolante é maggiore del numero di nodi introdotto.Ricomincia');

            disp('Introduci :');

         else

            err=1;

         end

     end 

     [L,risp]=intminqu(x,y,xi,n,m,c);

     if risp==1

           disp('Non é possibile fare questo tipo di interpolazione');

           disp('adoperane un altro : ');

        else

           dom=1;

           L=L';

        end

     end

   end

   if risp==0

      if graf==1

         hold on;

         asc=x(1):0.1:x(n);

         [h,k]=size(asc);

         for i=1:k

             ord(i)=feval(F,asc(i));

         end

         plot(asc,ord,'b');

         gtext('blu=funzione f');

      end

      xlabel('asse x');

      ylabel('asse y');

      gtext('+=valori calcolati');

      gtext('o=nodi interpolanti');

      gtext('nero=funzione interpolante');

      hold off;

   end

   if dom==1

      disp('Il vettore soluzione y corrispondente ai punti x immessi é : ');

      disp('x=             y=');

      disp([xi L]);

      dom=input('Se vuoi ricominciare premi "0" : ');

   end

  end

end


next up previous   
Next: Calcolo degli zeri di una funzione Up:Introduzione  Previous: Calcolo degli Autovalori di una matrice
Intro Gen: Introduzione Generale  Home: Home page
Vito Marinelli
8-5-2000

 

HyperCounter
BPath Contatore