Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

csapi

Interpolación por splines cúbicos

Descripción

ejemplo

Nota

Encontrará un método para interpolar splines cúbicos más sencillo, pero menos flexible usando la app Curve Fitter o la función fit. Consulte Sobre splines de suavizado.

pp = csapi(x,y) devuelve el formato ppform de un spline cúbico s con secuencia de nudos x que toma los valores y(:,j) en x(j) para j=1:length(x). Los valores y(:,j) pueden ser escalares, vectores, matrices y arreglos n-dimensionales. La función calcula la media de los puntos de datos con el mismo sitio de datos y, a continuación, los ordena según su sitio. Con x como los sitios de datos ordenados resultantes, el spline s satisface las condiciones de contorno not-a-knot, como

jumpx(2)Ds3=0=jumpx(end1)D3(s)

donde D3s es la tercera derivada de s.

Si x es un arreglo de celdas de secuencias x1, ..., xm de longitudes n1, ..., nm, y es un arreglo de tamaño [n1,...,nm] (o de tamaño [d,n1,...,nm] si la interpolación es de valor d). En ese caso, pp es el formato ppform de una interpolación por splines cúbicos de m s para esos datos. En particular,

s(x(i1),,x(im))=y(:,i1,,im)

con i1=1:nl y im=1:nm.

Para llevar a cabo operaciones en este spline cúbico de interpolación, como evaluación, diferenciación y representación, utilice la estructura pp. Para obtener más información, consulte las funciones fnval, fnder y fnplt.

ejemplo

values = csapi(x,y,xx) devuelve los valores del spline de suavizado evaluado en los puntos xx. Esta sintaxis es la misma que la de fnval(csapi(x,y),xx).

Este comando es básicamente la función de MATLAB® spline, que, a su vez, es una versión reducida de la rutina CUBSPL de Fortran en PGS, excepto porque csapi (y ahora también spline) acepta datos de valor vectorial y puede gestionar datos de malla.

Ejemplos

contraer todo

Este ejemplo muestra cómo usar el comando csapi de Curve Fitting Toolbox™ para construir interpolaciones por splines cúbicos.

Interpolación para dos puntos

El comando

values = csapi(x,y,xx)

devuelve los valores en xx de la interpolación por splines cúbicos de los datos proporcionados (x,y) utilizando la condición de contorno not-a-knot. Esta interpolación es una función cúbica por tramos con secuencia de salto x, cuyos tramos cúbicos se unen para formar una función con dos derivadas continuas. La condición de contorno "not-a-knot" significa que, en el primer y el último salto interior, incluso la tercera derivada es continua (hasta el error de redondeo).

Especificar solo dos puntos de datos resulta en una interpolación de línea recta.

x = [0 1];
y = [2 0];
xx = linspace(0,6,121);
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Interpolant to Two Points')

Figure contains an axes object. The axes object with title Interpolant to Two Points contains 2 objects of type line. One or more of the lines displays its values using only markers

Interpolación para tres puntos

Si especifica tres puntos de datos, la función genera como salida una parábola.

x = [2 3 5];
y = [1 0 4];
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Interpolant to Three Points')

Figure contains an axes object. The axes object with title Interpolant to Three Points contains 2 objects of type line. One or more of the lines displays its values using only markers

Interpolación para cinco puntos

En términos más generales, si especifica cuatro o cinco puntos de datos, la función genera como salida un spline cúbico.

x = [1 1.5 2 4.1 5];
y = [1 -1 1 -1 1];
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Cubic Spline Interpolant to Five Points')

Figure contains an axes object. The axes object with title Cubic Spline Interpolant to Five Points contains 2 objects of type line. One or more of the lines displays its values using only markers

Hasta los errores de redondeo, y suponiendo que x es un vector con al menos cuatro entradas, la declaración pp = csapi(x,y) coloca el mismo spline en pp como la siguiente declaración, excepto porque la descripción del spline obtenido de esta segunda forma no utiliza saltos en x(2) y x(n-1):

pp = fn2fm(spapi(augknt(x([1 3:(end-2) end]),4),x,y),"pp");

Como ejemplo bivariado sencillo, represente una interpolación por splines bicúbicos para una wavelet de Ricker.

x =.0001 + (-4:.2:4); 
y = -3:.2:3;
[yy,xx] = meshgrid(y,x);
r = pi*sqrt(xx.^2+yy.^2); 
z = sin(r)./r;
bcs = csapi({x,y},z); 
fnplt(bcs) 
axis([-5 5 -5 5 -.5 1])

Figure contains an axes object. The axes object contains an object of type surface.

Puesto que MATLAB® considera la entrada z(i,j) como el valor en (x(j),y(i)), el código invierte x e y en la llamada a meshgrid. En su lugar, Curve Fitting Toolbox® sigue el estándar de la teoría de la aproximación mientras que z(i,j) es el valor en (x(i),y(j)).

Por esta razón, hay que tener cuidado cuando representa valores de un spline bivariado de este tipo con ayuda de la función mesh de MATLAB, como se muestra a continuación:

xf = linspace(x(1),x(end),41); 
yf = linspace(y(1),y(end),41);
mesh(xf,yf,fnval(bcs,{xf,yf}).')

Figure contains an axes object. The axes object contains an object of type surface.

Observe el uso de la traspuesta de la matriz de valores obtenida a partir de fnval.

Argumentos de entrada

contraer todo

Sitios de datos de valores de datos y que hay que ajustar, especificados como un vector o como un arreglo de celdas en el caso de datos multivariados. Se crea un spline f con nudos en cada sitio de datos x de forma que f(x(j)) = y(:,j) para todos los valores de j.

En el caso de datos de malla y multivariados, puede especificar x como un arreglo de celdas que especifica el sitio de datos en cada dimensión variable: f(x1(i),x2(j),...xn(k)) = y(:,i,j,...,k).

Tipos de datos: single | double

Valores de datos que se van a ajustar durante la creación del spline, especificados como vector, matriz o arreglo. Los valores de datos y(:,j) pueden ser escalares, matrices o arreglos n-dimensionales. Se promedian los valores de los datos que están en el mismo sitio de datos x.

Tipos de datos: single | double

Puntos de evaluación en los que se evalúa el spline, especificados como un vector o un arreglo de celdas de vectores en el caso de datos multivariados. La evaluación del spline se lleva a cabo usando fnval.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Spline en formato ppform, devuelto como estructura con los siguientes campos. Para obtener más información sobre el formato ppform, consulte El formato ppform.

Forma del spline, devuelta como pp. pp indica que el spline tiene forma polinómica por tramos.

Posiciones de los nudos del spline, devueltas como un vector o un arreglo de celdas de vectores en el caso de datos multivariados. Los vectores contienen elementos estrictamente crecientes que representan el inicio y el fin de cada uno de los intervalos en los que se definen los tramos polinómicos.

Coeficientes de los polinomios para cada tramo, devueltos como una matriz o como un arreglo en el caso de datos multivariados.

Número de tramos polinómicos que describen el spline, devuelto como un escalar o como un vector de números de tramos de cada variable en el caso de datos multivariados.

Orden de la función polinómica que describe cada tramo polinómico del spline, devuelta como un escalar o como un vector que contiene el orden de cada variable en el caso de datos multivariados.

Dimensionalidad de la función de destino, devuelta como un escalar.

Spline evaluado, devuelto como un vector o como una matriz o arreglo en el caso de datos multivariados. El spline se evalúa en los puntos de evaluación xx proporcionados.

Algoritmos

csapi es una implementación de la rutina CUBSPL de Fortran en PGS.

El sistema lineal tridiagonal relevante se construye y resuelve usando la funcionalidad de matrices dispersas de MATLAB.

El algoritmo también utiliza la condición de contorno not-a-knot, forzando a coincidir al primer y al segundo tramo polinómico de la interpolación, así como al penúltimo y al último tramo polinómico.

Historial de versiones

Introducido en R2006b