csape
Interpolación por splines cúbicos con condiciones de contorno
Sintaxis
Descripción
devuelve la interpolación por splines cúbicos de los datos pp
= csape(x
,y
)(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.
devuelve la interpolación por splines cúbicos de los datos de malla mediante entradas de malla univariada pp
= csape({x1,...,xn},___)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
Usar condiciones de contorno personalizadas con csape
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, x(1)
para los escalares proporcionados , y . Puede calcular la interpolación por splines cúbicos como la suma de (la interpolación por splines cúbicos de los datos proporcionados usando las condiciones de contorno predeterminadas) y (la interpolación por splines cúbicos de los datos cero usando algunas condiciones de contorno no triviales):
Las condiciones de contorno que especifique en no tienen que ser las condiciones de contorno 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 .
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 , 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 que hemos mencionado antes. Para ello, calcule los valores de y usando la primera y segunda derivadas de los splines y .
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 y 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
El punto estacionario próximo al primer punto de datos muestra que las condiciones de contorno están implementadas en el ajuste.
Ajustar datos multivariados
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.
Proporcionar condiciones de contorno para las condiciones de contorno
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
x
— Sitios de datos
vector | arreglo de celdas
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
y
— Valores de datos que se van a ajustar
vector | matriz | arreglo
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
conds
— Condiciones de contorno
'clamped'
| 'complete'
| 'not-a-knot'
| 'periodic'
| 'second'
| 'variational'
| Matriz de 1 por 2
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:
| Iguala las pendientes finales a los valores proporcionados |
| Convierte el segundo y el penúltimo sitios en nudos inactivos. Esta opción ignora los valores que haya proporcionado para |
| Iguala la primera y segunda derivadas del extremo izquierdo con las del extremo derecho. |
| Iguala las segundas derivadas del extremo a los valores proporcionados |
| Iguala las segundas derivadas de los extremos a cero. Esta opción ignora los valores que haya proporcionado para |
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) = |
|
curved | D2s(e) = |
|
periodic | Drs(a) = Drs(b), r = 1,2 |
|
variational | D2s(e) = 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]
e1
— Valor de la condición de contorno en el extremo izquierdo
escalar
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
e2
— Valor de la condición de contorno en el extremo derecho
escalar
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
pp
— Spline en formato ppform
estructura de spline
Spline en formato ppform, devuelto como estructura con los siguientes campos.
Form
— Forma del spline
pp
Forma del spline, devuelta como pp
. pp
indica que el spline tiene forma polinómica por tramos.
Breaks
— Ubicaciones de los nudos del spline
vector | arreglo de celdas
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.
Coefs
— Coeficientes de los polinomios
matriz | arreglo
Coeficientes de los polinomios para cada tramo, devueltos como una matriz o como un arreglo en el caso de datos multivariados.
Pieces
— Número de tramos polinómicos
escalar | vector
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.
Order
— Orden de los polinomios
escalar | vector
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.
Dim
— Dimensionalidad
escalar
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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)