spline
Interpolación de datos por splines cúbicos
Descripción
Ejemplos
Utilice spline para interpolar una curva de seno sobre puntos de muestra espaciados de forma irregular.
x = [0 1 2.5 3.6 5 7 8.1 10];
y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)
Utilice la interpolación por splines restringida o completa cuando conozca las pendientes de punto final. Para ello, puede especificar el vector de valores con dos elementos adicionales, uno al principio y otro al final, para definir las pendientes de punto final.
Cree un vector de datos y otro vector con las coordenadas de los datos.
x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
Interpole los datos utilizando spline y represente los resultados. Especifique la segunda entrada con dos valores adicionales [0 y 0] para significar que ambas pendientes de punto final son cero. Utilice ppval para evaluar el ajuste por splines sobre 101 puntos en el intervalo de interpolación.
cs = spline(x,[0 y 0]); xx = linspace(-4,4,101); plot(x,y,'o',xx,ppval(cs,xx),'-');

Extrapole un conjunto de datos para predecir el crecimiento de la población.
Cree dos vectores para representar los años del censo, desde 1900 hasta 1990 (t), y la población estadounidense correspondiente en millones de personas (p).
t = 1900:10:1990;
p = [ 75.995 91.972 105.711 123.203 131.669 ...
150.697 179.323 203.212 226.505 249.633 ];Extrapole y prediga la población en el año 2000 utilizando un spline cúbico.
spline(t,p,2000)
ans = 270.6060
Genere la representación de un círculo con los cinco puntos de datos y(:,2),...,y(:,6) marcados con una "o". La matriz y contiene dos columnas más que la x. Por lo tanto, spline utiliza y(:,1) e y(:,end) como pendientes finales. El círculo empieza y acaba en el punto (1,0), de modo que el punto se representa dos veces.
x = pi*[0:.5:2];
y = [0 1 0 -1 0 1 0;
1 0 1 0 -1 0 1];
pp = spline(x,y);
yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or')
axis equal
Utilice el spline para muestrear una función sobre una malla más precisa.
Genere curvas de seno y de coseno para unos pocos valores entre 0 y 1. Utilice la interpolación por splines para muestrear una función sobre una malla más precisa.
x = 0:.25:1; Y = [sin(x); cos(x)]; xx = 0:.1:1; YY = spline(x,Y,xx); plot(x,Y(1,:),'o',xx,YY(1,:),'-') hold on plot(x,Y(2,:),'o',xx,YY(2,:),':') hold off

Compare los resultados de la interpolación que han producido spline, pchip y makima para dos conjuntos de datos diferentes. Todas estas funciones realizan formas diferentes de interpolación cúbica de Hermite por tramos. Cada función difiere del resto en el modo en que calcula las pendientes de la interpolación, lo que resulta en diferentes comportamientos cuando los datos subyacentes contienen zonas planas u ondulaciones.
Compare los resultados de la interpolación en los datos de la muestra que conectan las zonas planas. Cree vectores de valores x, valores de función en esos puntos y, y puntos de consulta xq. Calcule las interpolaciones en los puntos de consulta utilizando spline, pchip y makima. Represente los valores de la función interpolada en los puntos de consulta para compararlos.
x = -3:3; y = [-1 -1 -1 0 1 1 1]; xq1 = -3:.01:3; p = pchip(x,y,xq1); s = spline(x,y,xq1); m = makima(x,y,xq1); plot(x,y,'o',xq1,p,'-',xq1,s,'-.',xq1,m,'--') legend('Sample Points','pchip','spline','makima','Location','SouthEast')

En este caso, pchip y makima presentan un comportamiento similar porque evitan los sobreimpulsos y pueden conectar las zonas planas con precisión.
Realice una segunda comparación utilizando una función de muestra oscilatoria.
x = 0:15; y = besselj(1,x); xq2 = 0:0.01:15; p = pchip(x,y,xq2); s = spline(x,y,xq2); m = makima(x,y,xq2); plot(x,y,'o',xq2,p,'-',xq2,s,'-.',xq2,m,'--') legend('Sample Points','pchip','spline','makima')

Cuando la función subyacente es oscilatoria, spline y makima capturan el movimiento entre puntos mejor que pchip, que se aplana de forma pronunciada cerca de los extremos locales.
Argumentos de entrada
Coordenadas x, especificadas como un vector. El vector x especifica los puntos en los que se dan los datos y. Los elementos de x deben ser únicos.
La interpolación por splines cúbicos requiere al menos 4 puntos, y se recurre a la interpolación lineal o cuadrática si se proporcionan 2 o 3 puntos, respectivamente.
Tipos de datos: single | double
Valores de función en las coordenadas x, especificados como un vector, matriz o arreglo numérico. x e y suelen tener la misma longitud, pero y también puede tener exactamente dos elementos más que x para especificar las pendientes finales.
Cuando y es una matriz o un arreglo, los valores de la última dimensión, y(:,...,:,j), se toman como valores que coinciden con x. En este caso, la última dimensión de y debe tener la misma longitud que x o tener exactamente dos elementos más.
Las pendientes finales del spline cúbico siguen estas reglas:
Cuando
xeyson vectores del mismo tamaño, se aplican las condiciones finales de "no es un nudo".Cuando
xoyson un escalar, se expanden para tener la misma longitud que la otra y se aplican las condiciones finales de "no es un nudo".Cuando
yes un vector que contiene dos o más valores que entradas tienex,splineutiliza el primer y el último valor deycomo pendientes finales del spline cúbico. Por ejemplo, cuandoyes un vector:y(2:end-1)proporciona los valores de la función en cada punto dex.y(1)proporciona la pendiente al principio del intervalo situado enmin(x).y(end)proporciona la pendiente al final del intervalo situado enmax(x).
Del mismo modo, cuando
yes una matriz o un arreglo deNdimensiones dondesize(y,N)es igual alength(x)+2:y(:,...,:,j+1)proporciona los valores de la función en cada punto dexparaj = 1:length(x).y(:,:,...:,1)proporciona las pendientes al principio de los intervalos situados enmin(x).y(:,:,...:,end)proporciona las pendientes al final de los intervalos situados enmax(x).
Tipos de datos: single | double
Puntos de consulta, especificados como escalar, vector, matriz o arreglo. Los puntos especificados en xq son las coordenadas x de los valores de la función interpolada yq calculados por spline.
Tipos de datos: single | double
Argumentos de salida
Valores interpolados en puntos de consulta, devueltos como escalar, vector, matriz o arreglo.
El tamaño de s está relacionado con los tamaños de y y xq:
Cuando
yes un vector,stiene el mismo tamaño quexq.Cuando
yes un arreglo de tamañoNy = size(y), se aplican las condiciones siguientes:Cuando
xqes un escalar o un vector,size(s)devuelve[Ny(1:end-1) length(xq)].Cuando
xqes un arreglo,size(s)devuelve[Ny(1:end-1) size(xq)].
Polinomio por tramos, devuelto como una estructura. Utilice esta estructura con la función ppval para evaluar el polinomio por tramos en uno o más puntos de consulta. Esta estructura contiene estos campos.
| Campo | Descripción |
|---|---|
form |
|
breaks | Vector de longitud |
coefs | Matriz de |
pieces | Número de tramos, |
order | Orden de los polinomios |
dim | Dimensionalidad del destino |
Dado que los coeficientes del polinomio de coefs son coeficientes locales para cada intervalo, deberá restar el punto final más bajo del intervalo de nudos correspondiente para utilizar los coeficientes en una ecuación polinómica convencional. En otras palabras, para los coeficientes [a,b,c,d] del intervalo [x1,x2], el polinomio correspondiente es
Sugerencias
También puede realizar la interpolación por splines utilizando la función
interp1con el comandointerp1(x,y,xq,'spline'). Mientras quesplinerealiza la interpolación en las filas de una matriz de entrada,interp1lo hace en las columnas de la matriz de entrada.
Algoritmos
Un sistema lineal tridiagonal (posiblemente con varios laterales derechos) se resuelve para obtener la información necesaria para describir los coeficientes de los diversos polinomios cúbicos que conforman el spline de interpolación. spline utiliza las funciones ppval, mkpp y unmkpp. Estas rutinas forman un pequeño conjunto de funciones para trabajar con polinomios por tramos. Para acceder a funcionalidades más avanzadas, consulte interp1 o las funcionalidades de splines de Curve Fitting Toolbox™.
Referencias
[1] de Boor, Carl. A Practical Guide to Splines. Springer-Verlag, New York: 1978.
Capacidades ampliadas
Notas y limitaciones de uso:
La entrada
xdebe ser estrictamente creciente.La generación de código no elimina las entradas
ycon valoresNaN.La generación de código no informa de un error con pendientes finales infinitas en
y.Si genera código para la sintaxis
pp = spline(x,y), no podrá introducirppen la funciónppvalde MATLAB®. Para crear una estructurappde MATLAB a partir de una estructurappcreada por el generador de código:Al generar código, utilice
unmkpppara devolver los detalles del polinomio por tramos a MATLAB.En MATLAB, utilice
mkpppara crear la estructurapp.
Si proporciona
xqyypresenta un tamaño variable y no es un vector de longitud variable, la orientación de las salidas de los vectores del código generado podría no coincidir con la orientación en MATLAB.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en entornos basados en subprocesos.
La función spline es compatible con entradas de arreglos de GPU con estas notas y limitaciones de uso:
El argumento de entrada
yno puede ser disperso.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)