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
|