# 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];