Ejemplo sencillo de polinomios de tendencia 1D¶

Métodos potenciales de prospección, FCAG, 2024.

Macros de $\LaTeX$ $\newcommand{\B}[1]{\mathbf{#1}}$

Dato¶

Generamos un dato sintético simple. Una señal sinusoidal con $\lambda=10$ km y amplitud arbitraria. Tomamos una serie de muestras no equiespaciadas para digitalizar la señal. Estas muestras las consideramos como las observaciones. Además, para ilustrar la señal original consideramos un intervalo $\Delta x$ constante y adecuado según el criterio de Nyquist.

Podemos agrupar las observaciones en el vector columna $\mathbf{d}=\begin{bmatrix} d_1 \\ \vdots \\ d_N \end{bmatrix} \: .$ Simulamos error en las observaciones sumando ruido aleatorio en cada entrada del vector $\B{d}$.

Ajuste con polinomio de grado $M$¶

Ajustamos polinomio de grado $M$ a las observaciones. Por ejemplo, para un modelo lineal ($M=1$), cada muestra $d_j$ observada en $x_j$ es modelada por

$$ax_j+b = d_j.$$

Expresando esta relación en notación vectorial, tenemos

$$ a\B{x}+b\B{1} = \B{d}, $$

donde $\B{x}$ es el vector columna $N\times 1$ con las coordenadas de los puntos de observación en $\B{x}$ y $\B{1}$ es un vector columna $N\times 1$ con el valor $1$ en cada una de sus componentes.

Otra manera de expresar el problema es reuniendo los parámetros del modelo en $\B{m}=\begin{bmatrix} a \\ b\end{bmatrix}$ y escribiendo la expresión anterior como

$$ \B{A}\B{m} = \B{d}, $$

donde $\B{A}=[\B{x}\: \B{1}]=\begin{bmatrix} x_1 & 1 \\ \vdots & \vdots \\ x_N & 1\end{bmatrix}$ es una matriz $N\times 2$.

Podemos utilizar numpy.polyfit() para realizar el ajuste de un polinomio de grado deg = M y obtener el vector de coeficientes $\mathbf{m}$ en m:

x = ...  # vector con las coordenadas de las observaciones
d = ...  # vector con las observaciones
M = 1    # grado del polinomio a ajustar
m = numpy.polyfit(x, d, deg = M)  # vector de parámetros ajustados
...

Una vez obtenido el ajuste, podemos evaluar el polinomio en una cudrícula más densa que la original. Con ello podemos interpolar el dato observado y visualizar el ajuste:

Visualización de los resultados¶

Visualizamos los ajustes para $M=1,2,3,9$.

Analizamos el error de ajuste según el grado del polinomio. El error se calcula como la norma Euclidea del vector diferencia entre el dato observado y valor arrojado por el ajuste polinomial:

$$e = ||\B{d}-\B{A}\B{m}||_2 .$$

Como muestra el gráfico, el error para $M=9$ es cero. ¿Implica ello un buen ajuste de tendencia?

Predicción¶

Por último, veamos el carácter predictivo del modelo obtenido. Para ello, generamos nuevas observaciones $\hat{\B{d}}$ y analizamos el error en la predicción con el valor arrojado por el modelo que fue ajustado para las observaciones originales $\B{d}$. El error en la predicción es aquí la norma Euclídea del vector de residuos:

$$e_P = ||\hat{\B{d}}-\B{A}\B{m}||_2 .$$

Analicemos el resultado. ¿Obtener un buen ajuste implica que tendremos luego una buena predicción?

Eso es todo por hoy.