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.

csape

Interpolación por splines cúbicos con condiciones de contorno

Descripción

pp = csape(x,y) devuelve la interpolación por splines cúbicos de los datos (x,y) proporcionados en formato ppform. La función aplica condiciones de contorno de Lagrange a cada extremo de los puntos de datos e iguala las pendientes finales del spline a la pendiente del polinomio cúbico que se ajusta a los cuatro últimos puntos de datos de cada extremo. Se promedian los valores de los datos que están en el mismo sitio.

ejemplo

pp = csape(x,y,conds) usa las condiciones de contorno especificadas por conds.

ejemplo

pp = csape(x,[e1,y,e2],conds) usa las condiciones de contorno especificadas por conds y los valores e1 y e2 para los valores de las condiciones de contorno a la izquierda y a la derecha, respectivamente.

ejemplo

pp = csape({x1,...,xn},___) devuelve la interpolación por splines cúbicos de los datos de malla mediante entradas de malla univariada x1,...,xn. En este caso, y es un arreglo n+r-dimensional donde r es la dimensionalidad de cada valor de datos. conds es un arreglo de celdas con n entradas que proporciona condiciones de contorno para cada una de las variables n. En algunos casos, debe proporcionar condiciones de contorno para las condiciones de contorno. Puede utilizar esta sintaxis con cualquiera de los argumentos de las sintaxis anteriores.

Ejemplos

contraer todo

Puede implementar condiciones de contorno personalizadas mediante la función csape. Supongamos que desea aplicar la siguiente condición en el punto del extremo izquierdo, e=x(1)

λ(s)aDs(e)+bD2s(e)=c

para los escalares proporcionados a, b y c. Puede calcular la interpolación por splines cúbicos s como la suma de s1 (la interpolación por splines cúbicos de los datos proporcionados usando las condiciones de contorno predeterminadas) y s0 (la interpolación por splines cúbicos de los datos cero usando algunas condiciones de contorno no triviales):

s=s1+c-λ(s1)λ(s0)s0

Las condiciones de contorno que especifique en s0 no tienen que ser las condiciones de contorno λ(s) definitivas que espera.

Este ejemplo usa los datos de prueba de titanio, un conjunto estándar de datos usados para ajustar datos. Cargue los datos mediante la función titanium.

[x,y] = titanium;

Defina los coeficientes de λ(s).

a = -2;
b = -1;
c = 0;

La condición de contorno se aplica al extremo izquierdo del conjunto de datos.

e = x(1);

Ahora, calcule la interpolación por splines cúbicos del conjunto de datos sin imponer las condiciones de contorno.

s1 = csape(x,y);

Para calcular s0, use datos cero de la misma longitud que y con un conjunto adicional de condiciones de contorno no triviales.

yZero = zeros(1,length(y));

La matriz de 1 por 2 conds establece las condiciones de contorno especificando las derivadas del spline que hay que fijar. Este ejemplo usa condiciones de contorno solamente en el extremo izquierdo de los datos, por lo que debe usar conds para fijar la primera derivada en el extremo izquierdo. En el extremo derecho, fije el valor de la propia función.

conds = [1 0];

Para especificar los valores a los que debe fijarse la función o sus derivadas, añádalos como valores adicionales al conjunto de datos que hay que ajustar; en este caso, yZero. El primer elemento especifica el valor en el extremo izquierdo y el último elemento especifica el valor en el extremo derecho.

En el extremo izquierdo, fije la primera derivada del spline para que tenga un valor de 1. En el extremo derecho, fije el valor de la propia función para que tenga un valor de 0 (que es el valor original del último elemento de yZero). Concatene estos valores de condiciones de contorno en los extremos respectivos de yZero y use csape para encontrar el spline que se ajuste a los datos con estos valores de condiciones de contorno.

s0 = csape(x,[1 yZero 0],conds);

Calcule el spline totalmente ajustado a partir de esos datos usando la expresión de s que hemos mencionado antes. Para ello, calcule los valores de λ0=λ(s0) y λ1=λ(s1) usando la primera y segunda derivadas de los splines s0 y s1.

d1s1 = fnder(fnbrk(s1,1));
d2s1 = fnder(d1s1);
d1s0 = fnder(fnbrk(s0,1));
d2s0 = fnder(d1s0);

Calcule las derivadas del primer tramo polinómico del spline, dado que las condiciones de contorno solo se aplican al extremo izquierdo de los datos.

lam1 = a*fnval(d1s1, e) + b*fnval(d2s1,e);
lam0 = a*fnval(d1s0, e) + b*fnval(d2s0,e);

Ahora, use λ1 y λ0 para calcular el spline definitivo y completamente ajustado.

pp = fncmb(s0,(c-lam1)/lam0,s1);

Represente el spline para comparar los resultados del ajuste predeterminado y las condiciones de contorno.

fnplt(pp,[594, 632])
hold on
fnplt(s1,'b--',[594, 632])
plot(x,y,'ro','MarkerFaceColor','r')
hold off
axis([594, 632, 0.62, 0.655])
legend 'Desired end conditions' ...
'Default end-conditions' 'Data' ...
    Location SouthEast

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Desired end conditions, Default end-conditions, Data.

El punto estacionario próximo al primer punto de datos muestra que las condiciones de contorno están implementadas en el ajuste.

Use csape para ajustar datos multivariados y con valor vectorial. Este ejemplo ajusta datos con valor vectorial usando distintas condiciones de contorno para cada variable independiente.

En primer lugar, defina los datos. Para este ejemplo, defina los vectores tridimensionales v en un campo bidimensional, con condiciones restringidas o pendientes obligatorias en la dirección x y condiciones de contorno periódicas en la dirección y.

x = 0:4;
y = -2:2;

s2 = 1/sqrt(2);

v = zeros( 3, 7, 5 );
v(1,:,:) = [1 0 s2 1 s2 0 -1].'*[1 0 -1 0 1];
v(2,:,:) = [1 0 s2 1 s2 0 -1].'*[0 1 0 -1 0];
v(3,:,:) = [0 1 s2 0 -s2 -1 0].'*[1 1 1 1 1];

v es un arreglo tridimensional con el valor vectorial v(:,i+1,j) en las coordenadas x(i),y(j). Dos entradas adicionales en la dimensión x especifican los valores de la pendiente: los puntos de datos v(:,1,j) y v(:,7,j) proporcionan el valor de la primera derivada en las rectas x = 0 y x = 4 para las condiciones de contorno restringidas. En la dimensión y, las condiciones de contorno periódicas no requieren ninguna especificación adicional.

Ahora, calcule la interpolación por splines cúbicos multivariada usando csape.

sph = csape({x,y},v,{'clamped','periodic'});

Antes de representar el resultado, evalúe el spline en un intervalo adecuado.

values = fnval(sph,{0:.1:4,-2:.1:2});

surf(squeeze(values(1,:,:)), ...
squeeze(values(2,:,:)), squeeze(values(3,:,:)));

axis equal
axis off

También puede evaluar y representar la superficie del spline usando el comando sencillo fnplt(sph). Tenga en cuenta que v es un arreglo tridimensional y que v(:,i+1,j) es el vector tridimensional con el que debe coincidir en (x(i),y(j)), i=1:5, j=1:5. Además, como conds{1} es 'clamped', size(v,2) vale 7 (en lugar de 5) y la primera y última entradas de v(r,:,j) especifican los valores de la pendiente final.

En algunos casos, debe proporcionar condiciones de contorno para las condiciones de contorno. En este ejemplo bivariado, reproducirá el polinomio bicúbico g(x,y) = x3y3 mediante interpolación bicúbica completa. Después, derivará los datos necesarios (incluidos los valores de las condiciones de contorno) directamente de g para que sea más fácil ver cómo deben situarse los valores de las condiciones de contorno. Por último, comprobará el resultado.

sites = {[0 1],[0 2]}; coefs = zeros(4, 4); coefs(1,1) = 1;
g = ppmak(sites,coefs);
Dxg = fnval(fnder(g,[1 0]),sites);
Dyg = fnval(fnder(g,[0 1]),sites);
Dxyg = fnval(fnder(g,[1 1]),sites);

f = csape(sites,[Dxyg(1,1),   Dxg(1,:),    Dxyg(1,2); ...
                 Dyg(:,1), fnval(g,sites), Dyg(:,2) ; ...
                 Dxyg(2,1),   Dxg(2,:),    Dxyg(2,2)], ...
                                          {'complete','complete'});
if any(squeeze(fnbrk(f,'c'))-coefs)
    disp( 'this is wrong' )
end

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. La función crea nudos del spline s en cada sitio de datos x de forma que s(x(j)) = y(:,j) para todo j.

En el caso de datos de malla y multivariados, especifique x como un arreglo de celdas que proporciona el sitio de datos en cada dimensión variable, tales como s(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. Puede especificar los valores de datos y(:,j) como 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

Condiciones de contorno para el spline, especificadas como 'complete' o 'clamped', 'not-a-knot', 'periodic', 'second', 'variational' o como matriz de 1 por 2. Las opciones predefinidas de conds imponen unas condiciones de contorno idénticas en ambos extremos de los datos. Puede especificar unas condiciones de contorno diferentes en cada extremo proporcionando conds como una matriz de 1 por 2.

Estas son las condiciones de contorno predefinidas que existen:

'complete' o 'clamped'

Iguala las pendientes finales a los valores proporcionados e1 y e2. Si no proporciona valores para e1 y e2, esta opción coincide con las condiciones de contorno de Lagrange predeterminadas.

'not-a-knot'

Convierte el segundo y el penúltimo sitios en nudos inactivos. Esta opción ignora los valores que haya proporcionado para e1 y e2.

'periodic'

Iguala la primera y segunda derivadas del extremo izquierdo con las del extremo derecho.

'second'

Iguala las segundas derivadas del extremo a los valores proporcionados e1 y e2. Si no proporciona los valores e1 y e2, esta opción usa el valor predeterminado 0 para ambos. Con los valores predeterminados, esta opción es la misma que 'variational'.

'variational'

Iguala las segundas derivadas de los extremos a cero. Esta opción ignora los valores que haya proporcionado para e1 y e2.

Para especificar unas condiciones de contorno diferentes en cada extremo, proporcione conds como una matriz de 1 por 2. Los elementos de esta matriz especifican el orden de la derivada del spline fijada por las condiciones de contorno. Establecer conds(j) = i fija la derivada i-ésima Dis a un valor de condición de contorno.

El valor predeterminado de la condición de contorno es la derivada de la interpolación cúbica en los cuatro sitios a la izquierda cuando conds(1) = 1, y es 0 en los restantes casos. Establezca los valores de la condición de contorno para los lados izquierdo y derecho de los datos especificando e1 y e2, respectivamente.

Puede especificar el valor de conds(j) como 0, 1 o 2. Si especifica un valor distinto o no especifica conds(j), entonces conds(j) es 1 y el valor de la condición de contorno correspondiente es el valor predeterminado.

Estas son las condiciones de contorno predefinidas que existen:

clamped

Ds(e) = ej

if conds(j) == 1

curved

D2s(e) = ej

if conds(j) == 2

periodic

Drs(a) = Drs(b), r = 1,2

if conds == [0 0]

variational

D2s(e) = 0

if conds(j) == 2 & ej == 0

e, a y b se refieren a los datos ubicados a izquierda y derecha; ej es e1 para el extremo izquierdo de los datos y e2 para el extremo derecho de los datos.

Puede proporcionar los valores opcionales de condición de contorno e1 y e2 tanto si usa opciones predefinidas como si usa opciones definidas por el usuario para conds. Sin embargo, tenga en cuenta que algunas opciones predefinidas de conds ignoran todos los valores de condiciones de contorno que haya proporcionado.

Ejemplo: 'clamped', [1 0]

Valor de la condición de contorno en el extremo izquierdo del spline, especificado como un escalar. e1 especifica el valor para la derivada i-ésima en el extremo izquierdo de los datos, donde conds proporciona i. Aunque use distintas condiciones de contorno en cada extremo, si proporciona un valor de condición de contorno en un extremo, también debe proporcionar uno para el otro extremo.

Tenga en cuenta que algunas opciones predefinidas de conds ignoran todos los valores de condiciones de contorno que haya proporcionado.

El valor predeterminado de e1 es la derivada de la interpolación cúbica en los cuatro sitios a la izquierda cuando conds(1) = 1, y es 0 en los restantes casos.

Tipos de datos: single | double

Valor de la condición de contorno en el extremo derecho del spline, especificado como un escalar. e2 especifica el valor para la derivada i-ésima en el extremo derecho de los datos, donde conds proporciona i. Aunque use distintas condiciones de contorno en cada extremo, si proporciona un valor de condición de contorno en un extremo, también debe proporcionar uno para el otro extremo.

Tenga en cuenta que algunas opciones predefinidas de conds ignoran todos los valores de condiciones de contorno que haya proporcionado.

El valor predeterminado de e2 es la derivada de la interpolación cúbica en los cuatro sitios a la derecha cuando conds(2) = 1, y es 0 en los restantes casos.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Spline en formato ppform, devuelto como estructura con los siguientes campos.

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.

Algoritmos

El sistema lineal tridiagonal relevante se construye y resuelve usando las prestaciones de matriz dispersa de MATLAB®.

El comando csape llama a una versión muy ampliada de la rutina CUBSPL de Fortran en PGS.

Historial de versiones

Introducido antes de R2006a

Consulte también

| |