Está en la página 1de 9

PRCTICA 7.

Tratamiento de datos (Ajustes e Interpolacin)


1.Estudia en detalle la siguiente funcin.

function [f1,p]=difdiv(x,f,x1)
% [f1,p]=difdiv(x,f,x1)
% Calcula el valor de la funcin f1 en los puntos x1,
% usando el mtodo de diferencias divididas para
% calcular el polinomio p
%Los vectores x y f contienen las abscisas xi y las ordenadas fi = f(xi)
n=length(x);
tabla(:,1)=f;
for i=2:n;
for j=1:n-i+1
tabla(j,i)=(tabla(j+1,i-1)-tabla(j,i-1))/(x(j+i-1)-x(j));
end
end
p=tabla(1,:);
disp('Los coeficientes del polinomio son: '); disp(p)
% Calcular los factores (x-x0)*(x-x1)*
val(1,:)=ones(size(x1));
for k=2:n;
val(k,:)=val(k-1,:).*(x1-x(k-1));
end
% Evaluar la funcin en los puntos x1
f1=0;
for k=1:n;
f1=f1+val(k,:)*p(k);
end

2. Aplica la funcin anterior cuando la temperatura t medida en ciertos puntos x prximos a un foco de
calor han sido :
Temperatura t (C)
Punto x (m)

8.8
0.5

7.2
1.0

6.0
2.0

4.2
3.0

2.8
4.0

a. Representar grficamente los cinco datos (x,t) mediante el comando PLOT.


>> x=[0.5 1 2 3 4];
>> t=[8.8 7.2 6.0 4.2 2.8];
>> plot(x,t,'r.')
>> xlim([0 4.5])
>> xlabel('Punto x (m)')
>> ylabel('Temperatura t (C)')

b. Calcular el polinomio de interpolacin P4(x) por diferencias divididas de grado 4.


>> [f1,p4]=difdiv(x,t,4)
Los coeficientes del polinomio son:
8.8000 -3.2000 1.3333 -0.6533

0.2343

f1 =
2.8000
p4 =
8.8000 -3.2000 1.3333 -0.6533 0.2343
c. Estimar la temperatura t en posiciones distantes 1.5 y 2.5 m de acuerdo con el
polinomio P4(x).
>> [f1,p4]=difdiv(x,t,1.5)
Los coeficientes del polinomio son:
8.8000 -3.2000 1.3333 -0.6533

0.2343

f1 =
6.5179
p4 =
8.8000 -3.2000

1.3333 -0.6533

>> [f1,p4]=difdiv(x,t,2.5)
Los coeficientes del polinomio son:

0.2343

8.8000 -3.2000

1.3333 -0.6533

0.2343

f1 =
5.2443
d. Comprobar el resultado del apartado (c) con el obtenido con la funcin intrnseca de
MATLAB llamada interp1.
La funcin y1=interp1[x,y,x1,'tipo') que produce una interpolacin lineal (tipo=linear),
cbica (tipo=cubic) o por splines cbicos (tipo=splin). Esta funcin tiene una serie de
restricciones (vase help interp1). Hay una funcin llamada spline que adems de
interpolar valores por medio del mtodo de los splines cbicos puede devolver, como
parmetro de salida, la funcin splin.
>> interp1(x,t,1.5,'lineal')
ans =
6.6000
>> interp1(x,t,1.5,'cubic')
ans =
6.5502
>> interp1(x,t,1.5,'splin')
ans =
6.4947
>> interp1(x,t,2.5,'lineal')
ans =
5.1000
>> interp1(x,t,2.5,'cubic')
ans =
5.1169
>> interp1(x,t,2.5,'splin')
ans =
5.1934

P4(x) = 8.8000 -3.2000 1.3333 -0.6533 0.2343


Punto x (m)
1.5
2.5
Temperatura t(C) segn P4(x)
6.5179 5.2443
Temperatura t(C) segn INTERP1
6.6000 5.1000
6.5502 5.1169
6.4947

5.1934

lineal
cubica
Splines
cubicos

Superponer en la grfica del apartado a) el trazo de la curva P4(x) y los puntos


interpolados (1.5 y 2.5)
>> plot(x,t,'r.')
>> hold on

>> xlabel('Punto x (m)')


>> ylabel('Temperatura t (C)')
>> fplot('8.8+((-3.2)*x)+(1.3333*(x^2))+((-0.6533)*(x^3))+(0.2343*(x^4))',[0 5])
>> plot(1.5,6.5179,'g.',2.5,5.2443,'g.')

2. Matlab incorpora la funcin intrnseca polyfit que permite ajustar un conjunto de puntos por
mnimos cuadrados.
a. Aplica esta funcin a los siguientes datos, generando polinomios de grado 3, 4 y 5.
Utilizando polyval para evaluar los polinomios obtenidos, determina el error para
cada par de puntos (x,f(x)) de la tabla
X
f(x)

4.0
2.2

4.5
3.5

5.0
4.0

5.5
6.0

6.0
6.5

6.5
7.3

7.0
8.2

7.5
8.7

GRADO 3
>> p3=polyfit(x,f,3)
p3 =
-0.0525

0.7061 -0.8979 -2.1331

GRADO 4
>> p4=polyfit(x,f,4)
p4 =
0.0424 -1.0283

8.9864 -31.5994 39.8078

GRADO 5
>> p5=polyfit(x,f,5)
p5 =
0.0103 -0.2524

2.3221 -9.8117 20.4616 -17.1130

>> p3_x=polyval(p3,x)

p3_x =
Columns 1 through 7
2.2106

3.3377

4.4632

5.5478

6.5522

7.4368

8.1623

5.5887

6.5931

7.4232

8.1032

5.5819

6.5999

7.4309

8.0927

Column 8
8.6894
>> p4_x=polyval(p4,x)
p4_x =
Columns 1 through 7
2.2424

3.2786

4.4496

Column 8
8.7212
>> p5_x=polyval(p5,x)
p5_x =
Columns 1 through 7
2.2392

3.2891

4.4418

Column 8
8.7244
>>d=[f',p3_x',p4_x',p5_x'];
>> disp('
f
p3_x
p4_x
p5_x'), disp(d)
f
p3_x
p4_x
p5_x
2.2000 2.2106 2.2424 2.2392
3.5000 3.3377 3.2786 3.2891
4.0000 4.4632 4.4496 4.4418
6.0000 5.5478 5.5887 5.5819
6.5000 6.5522 6.5931 6.5999
7.3000 7.4368 7.4232 7.4309
8.2000 8.1623 8.1032 8.0927
8.7000 8.6894 8.7212 8.7244
b. Dibuja una grfica con los tres polinomios, para valores de x entre 3 y 8. Incluye los
puntos de la tabla. NOTA: Puedes usar xim e ylim.
>> plot(x,f,'.r')
>> hold on
>> fplot('-0.0525*(x^3)+0.7061*(x^2)-0.8979*x-2.1331',[3 8])
>> fplot('0.0424*(x^4)-1.0283*(x^3)+8.9864*(x^2)-31.5994*x+39.8078',[3 8],'g')
>>
fplot('0.0103*(x^5)-0.2524*(x^4)+2.3221*(x^3)-9.8117*(x^2)+20.4616*x-17.1130',[3
8],'m')

c. Obtn el polinomio de grado 7 por mnimos cuadrados y repite el apartado (a)


usando este polinomio. Qu observas? Justifica el resultado.
No se puede hacer porque el polinomio esta mal condicionado y da error.
>> p7=polyfit(x,f,7)
Warning: Polynomial is badly conditioned. Remove repeated data points
or try centering and scaling as described in HELP POLYFIT.
> In polyfit at 81
p7 =
1.0e+005 *
0.0000 -0.0003

0.0046 -0.0438

0.2500 -0.8487

1.5877 -1.2623

3. El fichero datos.txt contiene tres columnas de datos. Emplea el comando plot de Matlab
para representar la segunda columna de datos (y) frente a la primera (x). Empleando la
herramienta de ajustes bsicos de la ventana grfica de matlab obtn
a. la recta de regresin lineal. Representa y analiza los residuos.

>> load datos.txt

40

>>

data 1
linear

20
0
25
-20
20

-40
15-1

data 1

-0.8

-0.6

-0.4

-0.2

-0.8

-0.6

-0.4

-0.2

0
0.2
residuals

0.4

0.6

0.8

0.4

0.6

0.8

102
51
0
0
-5
-1
-10
-2
-15-1

0.2

-20
-25
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

plot(datos(:,1),datos(:,2))
b. Los polinomios por mnimos cuadrados de grados 2, 3 y 4. Cul es, a tu juicio, el
mejor ajuste?

25
data 1
quadratic
cubic
4th degree

20
15
10
5
0
-5
-10
-15
-20
-25
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

A partir del grado 3 y 4 se obtienen representaciones muy similares por lo que induce a
pensar que son los mejores para ajustar.
c. Repite los clculos anteriores empleando ahora la primera (x) y la tercera (y)
columnas de los datos.

30
data 1
20

10

-10

40
data 1
linear

-20

20
-30
-1

0
-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

0
0.2
residuals

0.4

0.6

0.8

-20
-40
-1

-0.8

-0.6

-0.4

-0.2

300

20

-5
-1

d.

-0.8

-0.6

-0.4

-0.2

0.2

0.4

data 1
quadratic
cubic
4th degree

0.6

0.8

10

-10

Calcula el
coeficiente
de
correlacin
entre x e y,
empleando el
comando de
matlab
corrcoef.

-20

>>
-30
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

x=datos(:,1);y=datos(:,2);
>> corrcoef(x,y)
ans =
1.0000
0.9993

0.9993
1.0000

e. Estima la incertidumbre sres de los datos (y) , empleando la expresin:


2
sres
=

1 n
2
( yi mxi c )

n 2 i =1

Donde m y c son los parmetros de la recta de regresin calculada en (a)..

Representa en un mismo grfico la recta de regresin, los pares de valores (x, y) y la


incertidumbre calculada como barras de error.

function [a]=sres(x,y)
m=22; c=1.6e-015;
for n=1:size(x,1)
sres(n)=(1/(n-2))*(y(n)-m*x(n)-c).^2;
end
a=sqrt(sres);
>> [a]=sres(x,y);
>>errorbar(x,y,a)

25
20
15
10
5
0
-5
-10
-15
-20
-25
-1.5

-1

-0.5

0.5

1.5