Sunteți pe pagina 1din 13

Ejercicios prcticos: Interpolaciones y funciones de base radial 1D (RBF) en

MATLAB
(a entregar)

I)

Interpolacin 1D

1) Considere el siguiente conjunto de datos:


x
0
1
2
3
4
5
6
7

y
2.3
5.8
8.9
12.5
14.7
18.7
20.5
25.8

Interpole los datos de x entre los puntos x=0 y x=10, usando un paso de
x=0.5 y los siguientes mtodos de interpolacin:
a)
b)
c)
d)
e)
f)

Lineal (por defecto).


De vecinos mas cercanos (nearest)
spline
pchip
cubic
v5cubic

Grafique los datos y el modelo interpolado en la misma figura por cada mtodo de
interpolacin. Compare sus resultados.
Solucion:
Los modelos que ajustan los datos con el mtodo lineal, de vecinos cercanos y
cubico (Matlab V5) no pueden extrapolar.

a)
interpolacin de datos 1D
30

25

20

datos
modelo lineal

15

10

5
x

10

yi =
Columns 1 through 10
2.3000 4.0500 5.8000 7.3500 8.9000 10.7000 12.5000 13.6000 14.7000 16.7000
Columns 11 through 20
18.7000 19.6000 20.5000 23.1500 25.8000
NaN
NaN
NaN
NaN
NaN
Column 21
NaN

b)
interpolacin de vecinos mas cercanos
30

25
datos
modelo nearest

20

15

10

5
x

10

yin =
Columns 1 through 10
2.3000 5.8000 5.8000 8.9000 8.9000 12.5000 12.5000 14.7000 14.7000 18.7000
Columns 11 through 20
18.7000 20.5000 20.5000 25.8000 25.8000
NaN
NaN
NaN
NaN
NaN
Column 21
NaN

c)
interpolacin spline
160
140

datos
modelo spline

120

100
80
60
40
20
0

5
x

10

yis =
Columns 1 through 10
2.3000 4.2375 5.8000 7.2625 8.9000 10.8251 12.5000 13.5247 14.7000
16.7262
Columns 11 through 20
18.7000 19.7204 20.5000 22.1546 25.8000 32.5521 43.5268 59.8399
82.6072 112.9446
Column 21
151.9679

d)

interpolacin pchip
40
datos
modelo piecewise cubic hermite interpolation

35
30

25
20
15
10
5
0

5
x

10

yip =
Columns 1 through 10
2.3000 4.1015 5.8000 7.3446 8.9000 10.7750 12.5000 13.5865 14.7000 16.7445
Columns 11 through 20
18.7000 19.5744 20.5000 22.6047 25.8000 29.4390 32.8746 35.4599 36.5479 35.4915
Column 21
31.6437

e)
interpolacin cubica
40
datos
modelo cubico

35
30

25
20
15
10
5
0

5
x

10

yic =
Columns 1 through 10
2.3000 4.1015 5.8000 7.3446 8.9000 10.7750 12.5000 13.5865 14.7000 16.7445
Columns 11 through 20
18.7000 19.5744 20.5000 22.6047 25.8000 29.4390 32.8746 35.4599 36.5479 35.4915
Column 21
31.6437

f)
interpolacin cubica en MATLAB V5
30

25

20

datos
modelo cubico

15

10

5
x

10

yiv5c =
Columns 1 through 10
2.3000 4.1000 5.8000 7.3438 8.9000 10.7563 12.5000 13.5750 14.7000 16.7250
Columns 11 through 20
18.7000 19.5188 20.5000 22.7125 25.8000
NaN
NaN
NaN
NaN
NaN
Column 21
NaN

****************************************************************************

II)

Interpolacin 2D usando funciones de base radial

A partir de la siguiente funcin y utilizando MATLAB:

() = ( 2 )
1) Calcule y grafique la interpolacin gaussiana RBF con el parmetro ms
adecuado (*). Grafique la funcin (), los nodos de interpolacin usados y
la interpolacin Gaussiana RBF. Explique su resultado.

Solucin:

%EJERCICIO 1
x = -2:0.5:2; xi = -2:0.01:2;

y = x.*exp(-x.*x);
yi = xi.*exp(-xi.*xi);
%param=10;
param=0.5; %parametro ideal de interpolacin porque es aproximadamente
igual a la distancia entre nodos
%param=0.1;
fi=rbfinterp(xi, rbfcreate(x, y,'RBFFunction', 'gaussian', 'RBFConstant',
param));
figure(4),plot(x,y,'o',xi,yi, xi, fi); legend('Nodos de interpolacin',
'funcin', 'Interpolacin Gausiana RBF')

0.5
0.4

Nodos de interpolacin
funcin
Interpolacin Gausiana RBF

0.3
0.2
0.1
0
-0.1
-0.2
-0.3
-0.4
-0.5
-2

-1.5

-1

-0.5

0.5

1.5

(*) Nota: recuerde que el ptimo es cercano a la distancia entre los nodos de
interpolacin.

2) Calcule la funcin de aproximacin gaussiana usando un parmetro


suavizador =0.1 y =0.5. Compare estos dos resultados. Grafique la funcin

(), los nodos de interpolacin usados y la aproximacin Gaussiana RBF


Compare estos resultados con los de la interpolacin del ejercicio (1).
%EJERCICIO 2
% Interpolacin vs suavizado
x = -2:0.5:2; xi = -2:0.01:2;
y = x.*exp(-x.*x);
yi = xi.*exp(-xi.*xi);
%param=10;
param=0.5; %parametro ideal de interpolacin porque es aproximadamente
igual a la distancia entre nodos
param_s=0.1;
fi=rbfinterp(xi, rbfcreate(x, y,'RBFFunction', 'gaussian', 'RBFConstant',
param)); %interpola
gi=rbfinterp(xi, rbfcreate(x, y,'RBFFunction', 'gaussian', 'RBFSmooth',
param_s));%suaviza
figure(5),plot(x,y,'o',xi,yi, xi, fi, xi,gi); legend('Nodos de
interpolacin', 'funcin', 'Interpolacin Gausiana RBF','Aproximacin
Gausiana RBF')
0.5
0.4
0.3
0.2
0.1
0
-0.1
-0.2
Nodos de interpolacin
funcin
Interpolacin Gausiana RBF
Aproximacin Gausiana RBF

-0.3
-0.4
-0.5
-2

-1.5

-1

-0.5

0.5

1.5

3) Calcule la interpolacin multicuadrtica (mulitiquadric) RBF y la


interpolacin cbica y estime sus errores. Grafique la funcin (), los nodos

de interpolacin usados, la interpolacin multicuadrtica RBF y la


interpolacin cbica. Compare estos resultados.
%EJERCICIO 3
%interpolacin cbica
x = -2:0.5:2;
xi = -2:0.01:2;
y = x.*exp(-x.*x);
yi = xi.*exp(-xi.*xi);
%1D Interpolation cubica usando RBF
ym = interp1(x,y,xi,'cubic');
fi=rbfinterp(xi, rbfcreate(x, y,'RBFFunction', 'multiquadric'));
%interpola cuadratico
figure(6),plot(x,y,'o', xi,yi, xi,fi, xi,ym);
legend('Nodos de interpolacin', 'funcin', 'Interpolacin RBF
multiquadric', 'Interpolacin cbica del Matlab')
figure(7),plot( xi, abs(fi-yi), xi, abs(ym-yi));
legend('Error de interpolacin RBF','Error de interpolacin cbica
MATLAB');
0.5
0.4
0.3
0.2
0.1
0
-0.1
-0.2
Nodos de interpolacin
funcin
Interpolacin RBF multiquadric
Interpolacin cbica del Matlab

-0.3
-0.4
-0.5
-2

-1.5

-1

-0.5

0.5

1.5

0.045

Error de interpolacin RBF


Error de interpolacin cbica MATLAB

0.04

0.035

0.03

0.025

0.02

0.015

0.01

0.005

0
-2

-1.5

-1

-0.5

0.5

1.5

A partir de la siguiente funcin y utilizando MATLAB:

() = ( 2 2 )
4)

Grafique una malla aleatoria (use la funcin rand tipo seed y la funcin
meshgrid) de 50 puntos en el intervalo entre -2 < x < 2 y -2 < y < 2, a un
paso de 0.05 puntos. A dicha malla asgnele la funcin () e interplela
(use las funciones meshgrid y griddata, este ltimo con una interpolacin
cbica). Interpole los datos utilizando la interpolacin RBF multicuadrtica
(funcin rbfinterp, rbfcreate) con un parmetro =2.0. Grafique en 3D y
compare ambos resultados. Calcule los errores con amabas
interpolaciones y grafquelas. Compare los resultados.

%Ejercicio 4
rand('seed',0)
x = rand(50,1)*4-2; y = rand(50,1)*4-2;
z = x.*exp(-x.^2-y.^2);
ti = -2:.05:2;
[XI,YI] = meshgrid(ti,ti);
%interpolacion cubica con la function griddata
ZIc = griddata(x,y,z,XI,YI,'cubic');

%RBF interpolation
ZI = rbfinterp([XI(:)'; YI(:)'], rbfcreate([x'; y'], z','RBFFunction',
'multiquadric', 'RBFConstant', 2));
%ZI = rbfinterp([XI(:)'; YI(:)'], rbfcreate([x'; y'], z','RBFFunction',
'cubic', 'RBFConstant', 2));
ZI_s = reshape(ZI, size(XI)); %cambia el tamao, en este caso de vector
ZI a matriz
%Plot data
figure(8)
subplot(2,2,1); mesh(XI,YI,ZIc), hold, axis([-2 2 -2 2 -0.5 0.5]);
plot3(x,y,z,'.r'), hold off; title('Interpolation using Matlab function
griddata(method=cubic)');
subplot(2,2,3);
pcolor(abs(ZIc - XI.*exp(-XI.^2-YI.^2))); colorbar;
title('griddata(method=cubic) interpolation error');
subplot(2,2,2);
mesh(XI,YI,ZI_s), hold, plot3(x,y,z,'.r'), hold off; title('RBF
interpolation'); axis([-2 2 -2 2 -0.5 0.5]);
subplot(2,2,4);
pcolor(abs(ZI_s - XI.*exp(-XI.^2-YI.^2))); colorbar; title('RBF
interpolation error');

Conclusiones: el mtodo cubico no extrapola y las interpolaciones resultantes de


los dos mtodos difieren porque la una arroja una interpolacin cubica (la obtenida
con las funcin griddata) y la otra arroja una interpolacin multicuadrtica (la
obtenida con las funciones de base radial). Esto se ve reflejado en los errores de
interpolacin que son mas altos altos al utilizar el mtodo cbic (del orden de 10-2)
comparados el del metodo multicuadratico (10-3). Si utlizaramos el metodo cubico
con las FBR entonces estos errores aumentaran.

1.5

10

20

30

40

50

60

10

20

30

40

50

60

70

80

0.02

0.04

0.06

0.08

10

20

30

40

50

60

70

70
0.1

80

griddata(method=cubic) interpolation error

80

-2
-2

-1.5

-1.5

-1

-1

0.5

-0.5

-0.5

-0.5

0.5

0.5

-1

-1.5

1.5

1.5

-2
-2

Interpolation using Matlab function griddata(method=cubic)

10

20

-1.5

-0.5

30

40

50

RBF interpolation error

-1

60

70

RBF interpolation

80

0.5

-3

x 10
7

1.5

-2
-2

10

20

30

40

50

60

10

20

30

40

50

60

70

0.02

0.04

0.06

0.08

10

20

30

40

50

60

70

70
0.1

80

80

-1

80

griddata(method=cubic) interpolation error

-1

-0.5
2

-0.5
2

0.5

0.5

Interpolation using Matlab function griddata(method=cubic)

10

20

-1
-2

30

40

50

RBF interpolation error

60

-2

70

80

-1

RBF interpolation

-3

x 10
7

S-ar putea să vă placă și