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.

spaps

Spline de suavizado

Descripción

ejemplo

Nota

Encontrará un método para generar splines de suavizado más sencillo pero menos flexible en la app Curve Fitter o en la función fit.

sp = spaps(x,y,tol) devuelve el B-form de la función f más suave, que se encuentra dentro de la tolerancia tol dada de los puntos de datos (x(j), y(:,j)), j=1:length(x) dados. Los valores de los datos y(:,j) son escalares, vectores, matrices o incluso arreglos n-dimensionales. Los puntos de datos con el mismo sitio de datos se sustituyen por su media ponderada, siendo su ponderación la suma de las ponderaciones correspondientes, y la tolerancia tol se reduce en consecuencia.

[sp,values] = spaps(x,y,tol) también devuelve los valores suavizados. values es igual que fnval(sp,x).

En este caso, la distancia de la función f a los datos dados se mide por

E(f)=j=1nw(j)|(y(:,j)f(x(j)))|2

con la opción predeterminada para las ponderaciones w, que hace de E(f) la aproximación de la regla del trapecio compuesta a min(x)max(x)|yf|2, y |z|2, que denota la suma de los cuadrados de las entradas de z.

Además, por la más suave se entiende que se minimiza la siguiente medida de rugosidad:

F(Dmf)=min(x)max(x)λ(t)|Dmf(t)|2dt

donde Dmf denota la m-ésima derivada de f. El valor predeterminado de m es 2, el valor predeterminado de la ponderación de la medida de rugosidad λ es la constante 1 y esto hace que f sea un spline de suavizado cúbico.

Cuando tol es no negativo, el spline f se determina como el minimizador único de la expresión ρE(f) + F(Dmf), eligiéndose el parámetro de suavizado ρ (opcionalmente devuelto) de modo que E(f) sea igual a tol. Por tanto, cuando m es 2, tras la conversión a ppform, el resultado debería ser el mismo (hasta el redondeo) que el obtenido por csaps(x,y,ρ/(ρ + 1)). Además, cuando tol es igual a cero, se devuelve la interpolación por splines "natural" o variacional de orden 2m. Para tol suficientemente grandes, se devuelve la aproximación por mínimos cuadrados a los datos mediante polinomios de grado <m.

Cuando tol es negativo, ρ es -tol.

El valor predeterminado de la función λ de ponderación en la medida de rugosidad es la función constante 1. Pero puede elegir que sea, en términos más generales, una función constante por tramos, con saltos únicamente en los sitios de los datos. Si el vector x es estrictamente creciente, se especifica una constante por tramos λ introduciendo tol como un vector del mismo tamaño que x. En ese caso, se toma tol(i) como el valor constante de λ en el intervalo (x(i-1) ... x(i)), i=2:length(x), mientras que tol(1) se sigue utilizando como la tolerancia especificada.

[sp,values,rho] = spaps(x,y,tol) también devuelve el valor real de ρ utilizado como tercer argumento de salida.

[...] = spaps(x,y,tol,w,m) permite especificar el vector de ponderaciones w o el entero m proporcionándolos como argi. Para ello, w debe ser un vector no negativo del mismo tamaño que x; m debe ser 1 (para un spline de suavizado lineal por tramos), 2 (para el spline de suavizado cúbico predeterminado) o 3 (para un spline de suavizado de quinto grado).

Si el spline de suavizado resultante, sp, se desea evaluar fuera de su intervalo básico, se debe sustituir por fnxtr(sp,m) para garantizar que su m-ésima derivada sea cero fuera de ese intervalo.

ejemplo

[...] = spaps({x1,...,xr},y,tol,...) devuelve el B-form de un spline de suavizado de tensor-product r-variado que está aproximadamente dentro de la tolerancia especificada para los datos de malla dados. Para datos dispersos, use tpaps. Ahora se espera que y proporcione los valores de malla correspondientes, siendo size(y) igual a [length(x1),...,length(xr)] en caso de que la función sea de valor escalar e igual a [d,length(x1),...,length(xr)] en caso de que la función sea de valor d. Además, tol debe ser un arreglo de celdas con r entradas, siendo tol{i} la tolerancia utilizada durante el i-ésimo paso cuando se construye un spline de suavizado univariado (pero con valores vectoriales) en la i-ésima variable. La entrada opcional para m debe ser un vector r (con entradas del conjunto {1,2,3}) y la entrada opcional para w debe ser un arreglo de celdas de longitud r, estando w{i} vacío (para indicar que se desea la opción predeterminada) o bien siendo un vector positivo de la misma longitud que xi.

Ejemplos

contraer todo

Este código devuelve un ajuste a los datos ruidosos que se espera que se acerque bastante a los datos sin ruido subyacentes, ya que estos últimos proceden de una función que varía lentamente y que la TOL utilizada es del tamaño apropiado para el tamaño del ruido.

x = linspace(0,2*pi,21); y = sin(x) + (rand(1,21)-.5)*.2;
sp = spaps(x,y, (.05)^2*(x(end)-x(1)) );
fnplt(sp)

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

Este código utiliza los mismos datos y tolerancia que antes, pero elige la ponderación de la rugosidad para que sea solo 0.1 en la mitad derecha del intervalo y, en consecuencia, ofrece un ajuste más rugoso pero mejor.

sp1 = spaps(x,y, [(.025)^2*(x(end)-x(1)),ones(1,10),repmat(.1,1,10)] );
fnplt(sp1)

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

Por último, compare los dos splines cúbicos de suavizado obtenidos anteriormente.

fnplt(sp); 
hold on
fnplt(sp1,'r')
plot(x,y,'ok')
hold off
title('Two cubic smoothing splines')
xlabel('The red one has reduced smoothness requirement in right half.')

Figure contains an axes object. The axes object with title Two cubic smoothing splines, xlabel The red one has reduced smoothness requirement in right half. contains 3 objects of type line. One or more of the lines displays its values using only markers

Este ejemplo produce una aproximación suave a datos ruidosos a partir de una función bivariada suave. Tenga en cuenta que se usa ndgrid en este caso. El uso de meshgrid produciría un error.

x = -2:.2:2; y=-1:.25:1; 
[xx,yy] = ndgrid(x,y); 
rng(39);
z = exp(-(xx.^2+yy.^2)) + (rand(size(xx))-.5)/30;
sp = spaps({x,y},z,8/(60^2));  
fnplt(sp)
axis off

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. 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).

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. 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

Tolerancia de los puntos de datos dados, especificada como un escalar.

Tipos de datos: single | double

Ponderaciones w de los puntos de datos, especificadas como un vector de entradas no negativas del mismo tamaño que x.

Orden de la derivada, especificado como un escalar. Este valor debe ser 1 para un spline de suavizado lineal por tramos, 2 para el spline de suavizado cúbico predeterminado o 3 para un spline de suavizado de quinto grado.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Spline en formato B-form, devuelto como estructura con los siguientes campos.

Forma del spline, devuelta como B-. B- indica que el spline tiene el formato 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.

Valores del spline en los puntos de x, devueltos como un vector o como una matriz o arreglo de datos multivariados.

Parámetro de suavizado usado para calcular el spline, devuelto como un escalar o como un arreglo de celdas de valores escalares en el caso de datos multivariados.

Algoritmos

Esta función utiliza el enfoque de Reinsch [1], incluida la forma de elegir la ecuación para el parámetro de suavizado óptimo de tal modo que se disponga de una buena estimación inicial y se garantice que el método de Newton converja y lo haga rápidamente.

Referencias

[1] C. Reinsch. "Smoothing by spline functions." Numer. Math. 10 (1967), 177–183.

Historial de versiones

Introducido antes de R2006a