Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

spline

Interpolación de datos de spline cúbico

Descripción

ejemplo

s = spline(x,y,xq) devuelve un vector de valores interpolados s correspondiente a los puntos de consulta de xq. Los valores de s se determinan mediante la interpolación de spline cúbico de x y y.

ejemplo

pp = spline(x,y) devuelve una estructura polinómica tramos para su uso por ppval y la utilidad spline unmkpp.

Ejemplos

contraer todo

Utilice spline para interpolar una curva sinusoidal sobre puntos de muestra espaciados irregularmente.

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)

Use interpolación de splines con abrazadera o completa cuando se conozcan las pistas de extremo. Este ejemplo impone cero pendientes en los puntos finales de la interpolación.

x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');

Extrapolar un conjunto de datos para predecir el crecimiento demográfico.

Crear dos vectores para representar los años del censo de 1900 a 1990 (t) y la correspondiente población de los Estados Unidos 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 ];

Extrapolar y predecir la población en el año 2000 utilizando una spline cúbica.

spline(t,p,2000)
ans = 270.6060

Genere la trama de un círculo, con los cinco puntos de datos y(:,2),...,y(:,6) marcados con o. La matriz y contiene dos columnas más que x. Por lo tanto, spline utiliza y(:,1) y y(:,end) como endslopes. El círculo comienza y termina en el punto (1,0), por lo que el punto se traza 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 spline para probar una función sobre una malla más fina.

Generar curvas seno y coseno para unos pocos valores entre 0 y 1. Utilice interpolación de spline para probar las funciones sobre una malla más fina.

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 interpolación producidos por spline y pchip para dos funciones diferentes.

Crear vectores de valores x , valores de función en esos puntos yy puntos de consulta xq. Calcule las interpolaciones en los puntos de consulta mediante spline y pchip. Trace los valores de la función interpolada en los puntos de consulta para la comparación.

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);
plot(x,y,'o',xq1,p,'-',xq1,s,'-.')
legend('Sample Points','pchip','spline','Location','SouthEast')

En este caso, pchip es favorable, ya que no oscila libremente entre los puntos de muestra.

Realice una segunda comparación utilizando una función de muestra oscilante.

x = 0:25;
y = besselj(1,x);
xq2 = 0:0.01:25;
p = pchip(x,y,xq2);
s = spline(x,y,xq2);
plot(x,y,'o',xq2,p,'-',xq2,s,'-.')
legend('Sample Points','pchip','spline')

Cuando la función subyacente es oscilante, spline captura el movimiento entre puntos mejor que pchip.

Argumentos de entrada

contraer todo

x -coordenadas, especificada como un vector. El vector x especifica los puntos en los que se administran los datos y . Los elementos de x deben ser únicos.

Tipos de datos: single | double

Valores de función en x-coordenadas, especificadas como un vector, matriz o matriz numérica. x y y suelen tener la misma longitud, pero y también puede tener exactamente dos elementos más que x para especificar endslopes.

Si y es una matriz o matriz, los valores de la última dimensión, y(:,...,:,j), se toman como valores para coincidir con x. En ese caso, la última dimensión de y debe tener la misma longitud que x o tener exactamente dos elementos más.

Las endslopes de la spline cúbica siguen estas reglas:

  • Si x y y son vectores del mismo tamaño, entonces se utilizan las condiciones del extremo del no-uno-nudo.

  • Si x o y es un escalar, se expande para tener la misma longitud que el otro y se utilizan las condiciones de fin de no-a-nudo.

  • Si y es un vector que contiene dos valores más que x tiene entradas, a continuación, spline utiliza los valores primero y último de y como endslopes para la spline cúbica. Por ejemplo, si y es un vector, entonces:

    • y(2:end-1) proporciona los valores de función en cada punto de x

    • y(1) da la pendiente al principio del intervalo ubicado en min(x)

    • y(end) da la pendiente al final del intervalo que se encuentra en max(x)

  • De manera similar, si y es una matriz o una matriz N-dimensional con size(y,N) igual a length(x)+2, entonces:

    • y(:,...,:,j+1) proporciona los valores de función en cada punto de x para j = 1:length(x)

    • y(:,:,...:,1) da las pistas al principio de los intervalos situados en min(x)

    • y(:,:,...:,end) da las pistas al final de los intervalos ubicados en max(x)

Tipos de datos: single | double

Puntos de consulta, especificados como vectores. Los puntos especificados en xq son las coordenadas xpara los valores de función interpolados s que spline cálculos.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Valores interpolados en los puntos de consulta, devueltos como vector, matriz o matriz.

El tamaño de s está relacionado con los tamaños de y y xq:

  • Si y es un vector, s tiene el mismo tamaño que xq.

  • Si y es una matriz de tamaño Ny = size(y), se aplican estas condiciones:

    • Si xq es un escalar o un vector, size(s) devuelve [Ny(1:end-1) length(xq)].

    • Si xq es una matriz, size(s) devuelve [Ny(1:end-1) size(xq)].

Polinomio de tramos, devuelto como estructura. Utilice esta estructura con la función ppval para evaluar el polinomio de tramos en uno o más puntos de consulta. La estructura tiene estos campos.

CampoDescripción
form

'pp' para el polinomio de tramos

breaks

Vector de longitud L+1 con elementos que aumentan estrictamente que representan el inicio y el final de cada intervalo de L

coefs

L matriz de -by-k con cada fila coefs(i,:) que contiene los coeficientes locales de una orden k polinomio en el iintervalo TH , [breaks(i),breaks(i+1)]

pieces

Número de piezas, L

order

Orden de los polinomios

dim

Dimensionalidad del objetivo

Dado que los coeficientes polinómicos de coefs son coeficientes locales para cada intervalo, se debe restar el punto final inferior del intervalo de nudo correspondiente para utilizar los coeficientes en una ecuación polinómica convencional. En otras palabras, para los coeficientes [a,b,c,d] en el intervalo [x1,x2], el polinomio correspondiente es

f(x)=a(xx1)3+b(xx1)2+c(xx1)+d.

Sugerencias

  • También puede realizar interpolación de splines mediante la función interp1 con el comando interp1(x,y,xq,'spline'). Mientras que spline realiza la interpolación en filas de una matriz de entrada, interp1 realiza interpolación en columnas de una matriz de entrada.

Algoritmos

Se resuelve un sistema lineal tridiagonal (posiblemente con varios lados derecho) para la información necesaria para describir los coeficientes de los diversos polinomios cúbicos que componen la spline Interpolante. spline utiliza las funciones ppval, mkppy unmkpp. Estas rutinas forman una pequeña serie de funciones para trabajar con polinomios tramos. Para obtener acceso a funciones más avanzadas, vea interp1 o las funciones de spline Curve Fitting Toolbox™ .

Referencias

[1] de Boor, Carl. A Practical Guide to Splines. Springer-Verlag, New York: 1978.

Capacidades ampliadas

Consulte también

| | | |

Introducido antes de R2006a