Izquierda Indice Derecha

Interpolación y regresión lineal

 

En esta sección se muestran algunos de los métodos numéricos de interpolación y regresión lineal que pueden realizarse con Maxima. Es una primera toma de contacto y el lector interesado deberá consultar la documentación de Maxima relativa a los paquetes interpol y stats que deben ser cargados previamente.
Como ya indicamos a propósito del paquete draw, en caso de hacer un uso frecuente de estos paquetes es posible configurar Maxima para que los carge automáticamente cuando sea utilizado alguno de los comandos implementados en tales paquetes.

Las dos cuestiones, en esencia, tienen cierta similitud: se trata de partiendo de una tabla finita en dos variables (x,y) encontrar una función y=f(x) "adecuada" que permita asignar un valor f(x) a cada x de un cierto intervalo de manera que dicho valor sea "concordante" con los valores que figuran en la tabla.
Con frecuencia la tabla es el resultado de medidas experimentales y determinar qué tipo de función resulta "adecuada" para interpolando poder ampliar la tabla original es algo que depende de la naturaleza del problema y de la fijación de un modelo. No vamos a entrar en ese análisis; simplemente presentaremos algunas comandos de Maxima que implementan instrumentos para la gestión de modelos usuales.

 

indice

Interpolación lineal: poligonales

En este modelo se trata de dada la colección de puntos, ordenarlos y unirlos mediante rectas. Conceptualmente la cuestión es simple: dada la lista de los puntos se trata de ordenarla en orden creciente y tomar como función la correspondiente a poligonal que los une.

datos: [[7,2],[8,2],[1,5],[3,2],[6,7]]$ draw2d( points_joined=true, points(sort(datos)))$

Dado x, calcular f(x) requiere determinar en que intervalo está x y cual es la ecuación de la correspondiente recta; algo conceptualmente simple, pero tedioso a nivel de cuentas.
El paquete interpol introduce el comando

  1. load(interpol)$ datos: [[7,2],[8,2],[1,5],[3,2],[6,7]]$ linearinterpol(datos)$ f1(x):=''%$
  2. draw2d(terminal=wxt, title="Interpolación lineal", line_width=3, explicit(f1(x),x,1,8), color=red, point_type = 5, points(datos))$
  3. map(f1,[5]),numer;

 

indice

Interpolación mediante polinomios de Lagrange

Dados n puntos diferentes en el plano, el polinomio de interpolación de Lagrange es un polinomio de grado n-1 que pasa por tales puntos. El problema puede ser abordado con técnicas de álgebra lineal (véase Resolver ecuaciones); pero como en el caso anterior aquí haremos uso de comandos introducidos en el paquete interpol

  1. datos:[[7,2],[8,2],[1,5],[3,2],[6,7]]$ lagrange(datos,varname=w); expand(%); p(w):=''%$ lagrange(datos); expand(%); f2(x):=''%$
  2. draw2d(terminal=wxt, title="Interpolación de Lagrange", line_width=3, explicit(p(w),w,1,8), color=red, point_type = 5, points(datos))$
  3. map(p,[5]),numer; p(5),numer; map(f2,[5]),numer; f2(5),numer;

 

indice

Interpolación mediante splines cúbicos

Utiliza polinomios interpoladores de tercer grado entre dos puntos de referencia consecutivos con condiciones sobre sus derivadas que garanticen una curva sin cambios bruscos de dirección.

  1. cspline(datos); f3(x):=''%$ cspline(datos,d1=1,dn=0); f4(x):=''%$
  2. draw2d(terminal=wxt, title = "Interpolación mediante splines cúbicos", color=cyan, explicit(f3(z),z,1,8), color=violet, explicit(f4(z),z,1,8), color=red, point_type = 5, points(datos))$
  3. f3(4),numer; f4(5),numer;

 

indice

La recta de regresión lineal

A diferencia de los casos anteriores lo que se busca como modelo de ajuste a la tabla de puntos es una recta. Una recta que sin necesidad de pasar por ninguno de ellos, minimice la suma de las distancias al cuadrado de los puntos de la tabla a la recta. Obtenida la cual será usada como modelo de predicción de los valores f(x)

La carga del paquete stats subsidiariamente carga los paquetes descriptive, distrib y inference_result, destinados a la realización de muchos más cálculos usuales en estadística.

  1. load(stats)$ load(draw)$
  2. datos: [[125,140.7], [130,155.1], [135,160.3], [140,167.2], [145,169.8]]$ simple_linear_regression(datos);
    model: es la ecuación de la recta de regresión
    correlation: es el coeficiente de correlación...
  3. draw2d(terminal=wxt, title = "Recta de regresión", color = red, point_type = 5, points(s), color = blue, line_width = 3, explicit(1.405999999999985*x - 31.18999999999803,x,125,145))$

 

Izquierda Indice Derecha