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.

spapi

Interpolación por splines

Descripción

ejemplo

spline = spapi(knots,x,y) devuelve el spline f (si lo hay) de orden

k = length(knots) - length(x)
con secuencia de nudos knots para el que
(*)  f(x(j)) = y(:,j), all j.
Si algunas de las entradas de x son las mismas, entonces:

Dm(j)f(x(j))=y(:,j)

siendo m(j)={i<j:x(i)=x(j)} y Dmf la derivada m-ésima de f. En este caso, la repetición de factor r de un sitio z en x corresponde a la prescripción de valor y las primeras derivadas r – 1 de f en z. Para igualar la media de todos los valores de datos con los mismos datos en su lugar, llame a spapi con un cuarto argumento adicional.

Los valores de datos, y(:,j), pueden ser escalares, vectores, matrices o arreglos n-dimensionales.

spapi(k,x,y), siendo k un entero positivo, especifica el orden del spline deseado, k. En este caso, la función spapi llama a la función aptknt para determinar una secuencia de nudos viable, pero no necesariamente óptima, para los sitios indicados x. En otras palabras, el comando spapi(k,x,y) tiene el mismo efecto que el comando más explícito spapi(aptknt(x,k),x,y).

spapi({knork1,...,knorkm},{x1,...,xm},y) devuelve el B-form de una interpolación por splines de producto tensorial a datos de malla. Aquí, cada knorki es una secuencia de nudos o un entero positivo que especifica el orden polinomial usado en la variable i-ésima. La función spapi proporciona entonces una secuencia de nudos correspondiente para la variable i-ésima. Además, y debe ser un arreglo (r+m)-dimensional, siendo y(:,i1,...,im) el dato que ajustar en el sitio [x{1}(i1),...,x{m}(im)], para todo i1, ..., im. En contraposición al caso univariado, si el spline tiene valor escalar, entonces y puede ser un arreglo m-dimensional.

spapi(...,'noderiv'), con el vector de caracteres o escalar de cadena 'noderiv' como cuarto argumento, tiene el mismo efecto que spapi(...) salvo que los valores de datos que comparten el mismo sitio se interpretan de manera diferente. Con el cuarto argumento presente, la media de los valores de datos con el mismo sitio de datos se interpola en dicho sitio. Sin él, los valores de datos con el mismo sitio de datos se interpretan como valores de derivadas sucesivas que deben emparejarse en dicho sitio, tal como se ha descrito anteriormente, en el primer párrafo de esta descripción.

Ejemplos

contraer todo

La función spapi([0 0 0 0 1 2 2 2 2],[0 1 1 1 2],[2 0 1 2 -1]) produce el spline cúbico único f en el intervalo [0...2] con exactamente un nudo interior, en 1, que satisface las cinco condiciones

f(0+)=2,f(1)=0,Df(1)=1,D2f(1)=2,f(2-)=-1.

Entre ellas se incluye la triple coincidencia en 1, es decir, la coincidencia allí con los valores prescritos de la función y sus dos primeras derivadas.

A continuación se muestra un ejemplo de interpolación oscilatoria, a los valores y y pendientes s en los sitios x por un spline de quinto grado:

sp = spapi(augknt(x,6,2),[x,x,min(x),max(x)],[y,s,ddy0,ddy1]);

siendo ddy0 y ddy1 valores de la segunda derivada en los puntos finales.

Como ejemplo relacionado, si quiere interpolar la función sin(x) en los sitios de datos precisos mediante un spline cúbico e igualar su pendiente en una subsecuencia x(s), llame a la función spapi con estos argumentos:

sp = spapi(4,[x x(s)], [sin(x) cos(x(s))]).

La función aptknt proporcionará una secuencia de nudos adecuada. Si quiere interpolar los mismos datos por splines de quinto grado, solo tiene que cambiar el valor 4 a 6.

Como ejemplo de bivariada, a continuación se muestra una interpolación bivariada.

x = -2:.5:2; y = -1:.25:1; [xx, yy] = ndgrid(x,y);
z = exp(-(xx.^2+yy.^2));
sp = spapi({3,4},{x,y},z); fnplt(sp)

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

Como ilustración de la interpolación oscilatoria a datos de malla, a continuación se muestra una interpolación bicúbica completa en la que los datos se derivan explícitamente del polinomio bicúbico g(u,v)=u3v3. Esto resulta práctico para ver exactamente dónde deben colocarse las pendientes y las pendientes de las pendientes (las derivadas cruzadas) en los valores de datos suministrados. Puesto que g es un polinomio bicúbico, su interpolación, f, debe ser el propio g. Pruebe lo siguiente:

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 = spapi({4,4}, {sites{1}([1,2,1,2]),sites{2}([1,2,1,2])}, ...
          [fnval(g,sites), Dyg ; ...
           Dxg.'         , Dxyg]);
if any( squeeze( fnbrk(fn2fm(f,'pp'), 'c') ) - coefs )
'something went wrong', end

Argumentos de entrada

contraer todo

Secuencia de nudos del spline, especificada como un vector no decreciente.

Puntos en los que desea evaluar la función de spline f, especificados como vector, matriz o 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. 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).

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

Argumentos de salida

contraer todo

Spline, devuelto como una estructura con estos campos.

Forma del spline, devuelta como pp o B-. pp indica que el spline se da en la forma polinomial definida por tramos; B- indica que se da en B-form.

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.

Limitaciones

Los puntos (univariados) y los sitios dados deben satisfacer las condiciones de Schoenberg-Whitney para que se defina la interpolación. Si la secuencia de sitios x es no decreciente, entonces

knots(j)<x(j)<knots(j+k), all j

con igualdad posible en knots(1) y knots(end). En el caso multivariado, estas condiciones deben cumplirse por separado en cada variable.

Algoritmos

La función llama a spcol para proporcionar la matriz de colocación casi diagonal por bloques (Bj,k(x)) (con repeticiones en x que denotan derivadas, como se ha descrito anteriormente) y slvblk resuelve el sistema lineal (*) usando una factorización QR en bloque.

La función ajusta los datos de malla, en forma de producto tensorial, variable por variable, aprovechando el hecho de que un ajuste spline univariado depende linealmente de los valores que se están ajustando.

Historial de versiones

Introducido en R2006b