# PRÁCTICA 3: INTERPOLACIÓN Y AJUSTE DE FUNCIONES

## Ejemplo

### Nube de puntos

Creamos una lista donde introducimos la tabla de datos

datos:[[350,18], [380,19], [360,18], [380,19], [365,18], [430,19], [370,19], [425,19], [400,19], [422,20]];

Observar como llamamos a los datos:

datos[1];

datos[1][1];

datos[1][2];

Dibujamos la nube de puntos o diagrama de dispersión

wxplot2d([discrete, datos], [style, points]) /* nube de puntos */;

### Recta de ajuste de los puntos

Planteamos el sistema que resuelve mínimos cuadrados: 
primero los elementos del sistema

sumay:sum(datos[i][2],i,1,10);

sumaxy:sum(datos[i][1]*datos[i][2],i,1,10);

sumax:sum(datos[i][1],i,1,10);

sumax2:sum((datos[i][1])^2,i,1,10);

Ahora, planteamos el sistema, sabiendo que n=10

solve([sumay=10*b+sumax*a,sumaxy=sumax*b+sumax2*a],[a,b]);

%,numer /*el % indica la última operación realizada */;

Ya tenemos entonces la recta de ajuste

recta(x):=0.016148450586265*x+12.53117148241206;

### Dibujamos la recta y los puntos

load(draw)$

draw2d(explicit(recta(x),x,330,440),points(datos));

### Polinomio de interpolación por tres puntos

Para interpolar debemos cargar el paquete de la interpolación

load(interpol);

Como es interpolación por tres puntos, definimos los puntos

puntos:[[422,20],[425,19],[430,19]];

El polinomio de interpolación de Lagrange:

lagrange(puntos);

p(x):=(19*(x-425)*(x-422))/40-(19*(x-430)*(x-422))/15+(5*(x-430)*(x-425))/6;

[p(422),p(425),p(430)];

### Dibujamos la recta, el polinomio de interpolación 
y los tres puntos

load(draw)$

draw2d(explicit(p(x),x,420,440),explicit(recta(x),x,420,440),points(puntos));

### Estimar con la recta y el 
polinomio la producción de leche para una vaca de 427kg.

[recta(427),p(427)],numer;

### Dar el error de estimación en la producción de leche
para una vaca de 400kg y otra de 380kg.

Observar en el dibujo que ya se ve que para 400 el ajuste es mejor

[recta(400)-19,recta(380)-19];

## Ejercicio 1

### Nube de puntos

Creamos una lista donde introducimos la tabla de datos

datos:[[280,5],[260,4],[219,2],[201,1],[245,3],[241,3.5],[276,4.5],[229,2.5]];

Dibujamos la nube de puntos o diagrama de dispersión

wxplot2d([discrete, datos], [style, points]) /* nube de puntos */;

### Recta de ajuste de los puntos

Planteamos el sistema que resuelve mínimos cuadrados: 
primero los elementos del sistema

sumay:sum(datos[i][2],i,1,8);

sumaxy:sum(datos[i][1]*datos[i][2],i,1,8);

sumax:sum(datos[i][1],i,1,8);

sumax2:sum((datos[i][1])^2,i,1,8);

Ahora, planteamos el sistema, sabiendo que n=8

solve([sumay=8*b+sumax*a,sumaxy=sumax*b+sumax2*a],[a,b]),numer;

Ya tenemos entonces la recta de ajuste

recta(x):=0.047907944842593*x-8.49605004848743;

### Dibujamos la recta y los puntos

load(draw)$

draw2d(explicit(recta(x),x,200,300),points(datos));

### Polinomio de interpolación por tres puntos

Para interpolar debemos cargar el paquete de la interpolación

load(interpol);

Como es interpolación por dos puntos, definimos los puntos

puntos:[[201,1],[219,2]];

El polinomio de interpolación de Lagrange:

lagrange(puntos);

p(x):=(x-201)/9-(x-219)/18;

[p(201),p(219)];

### Dibujamos la recta, el polinomio de interpolación 
y los dos puntos

load(draw)$

draw2d(explicit(p(x),x,200,220),explicit(recta(x),x,200,220),points(puntos));

### Estimar con la recta y el 
polinomio la producción de leche para una vaca de 427kg.

[recta(210),p(210)],numer;

### Dar el error de estimación para dos puntos de la tabla.

Observar en el dibujo que ya se ve que para 400 el ajuste es mejor

[recta(201)-1,recta(241)-3.5];

## Ejercicio 2

[kill(datos),kill(p),kill(recta),kill(puntos)];

### Nube de puntos

Creamos una lista donde introducimos la tabla de datos

datos:[[13,94],[14,82],[15,61],[16,51],[17,40],[18,28]];

Dibujamos la nube de puntos o diagrama de dispersión

wxplot2d([discrete, datos], [style, points]) /* nube de puntos */;

### Recta de ajuste de los puntos

Planteamos el sistema que resuelve mínimos cuadrados: 
primero los elementos del sistema

sumay:sum(datos[i][2],i,1,6);

sumaxy:sum(datos[i][1]*datos[i][2],i,1,6);

sumax:sum(datos[i][1],i,1,6);

sumax2:sum((datos[i][1])^2,i,1,6);

Ahora, planteamos el sistema, sabiendo que n=8

solve([sumay=6*b+sumax*a,sumaxy=sumax*b+sumax2*a],[a,b]),numer;

Ya tenemos entonces la recta de ajuste

recta(x):=-13.31428571428572*x+265.7047619047619;

### Dibujamos la recta y los puntos

load(draw)$

draw2d(explicit(recta(x),x,12,19),points(datos));

### Polinomio de interpolación por tres puntos

Para interpolar debemos cargar el paquete de la interpolación

load(interpol);

Como es interpolación por dos puntos, definimos los puntos

puntos:[[14,82],[15,61]];

El polinomio de interpolación de Lagrange:

lagrange(puntos);

p(x):=61*(x-14)+82*(15-x);

[p(14),p(15)];

### Dibujamos la recta, el polinomio de interpolación 
y los dos puntos

load(draw)$

draw2d(explicit(p(x),x,13,16),explicit(recta(x),x,13,16),points(puntos));

### Estimar con la recta y el 
polinomio la producción de leche para una vaca de 427kg.

[recta(14.5),p(14.5)],numer;

### Dar el error de estimación para dos puntos de la tabla.

Observar en el dibujo que ya se ve que para 400 el ajuste es mejor

[recta(14)-82,recta(16)-51];