Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

csaps

Spline de suavizado cúbico

Descripción

Nota

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

pp = csaps(x,y) devuelve la interpolación por splines de suavizados cúbicos de los datos (x,y) proporcionados en formato ppform. El valor del spline f en el sitio de datos x(j) aproxima el valor de los datos y(:,j) para j = 1:length(x).

El spline de suavizado f minimiza

pj=1nwj|yjf(xj)|2error measure+(1p)λ(t)|D2f(t)|2dtroughness measure

Aquí, n es el número de entradas de x y la integral abarca el menor intervalo que contenga todas las entradas de x. yj y xj hacen referencia a las entradas j-ésimas de y y x, respectivamente. D2f indica la segunda derivada de la función f.

Los valores predeterminados de las ponderaciones de medida de errores wj son 1. El valor predeterminado de la función λ de ponderación constante por tramos en la medida de rugosidad es la función constante 1. De forma predeterminada, csaps selecciona un valor para el parámetro de suavizado p a partir de los sitios de datos x proporcionados.

Para evaluar un spline de suavizado fuera de su intervalo básico, antes debe extrapolarlo. Use el comando pp = fnxtr(pp) para garantizar que la segunda derivada sea cero fuera del intervalo que abarcan los sitios de datos.

ejemplo

pp = csaps(x,y,p) especifica el parámetro de suavizado p. También puede proporcionar las ponderaciones de medida de rugosidad λ proporcionando p como un vector cuya primera entrada es p y la i-ésima entrada es el valor de λ en el intervalo (x(i-1),x(i)).

ejemplo

pp = csaps(x,y,p,[],w) también especifica las ponderaciones w de medida de errores.

ejemplo

values = csaps(x,y,p,xx) usa el parámetro de suavizado p y devuelve los valores del spline de suavizado evaluado en los puntos xx. Esta sintaxis es la misma que la de fnval(csaps(x,y,p),xx).

values = csaps(x,y,p,xx,w) usa el parámetro de suavizado p y las ponderaciones de medida de errores w y devuelve los valores del spline de suavizado evaluado en los puntos xx. Esta sintaxis es la misma que la de fnval(csaps(x,y,p,[],w),xx).

[___] = csaps({x1,...,xm},y,___) proporciona el formato ppform de un spline de suavizado de producto tensorial m-variado para los datos en la cuadrícula rectangular descrita por {x1,...,xm}. Puede utilizar esta sintaxis con cualquiera de los argumentos de las sintaxis anteriores.

ejemplo

[___,P] = csaps(___) también devuelve el valor del parámetro de suavizado usado en el spline final resultante tanto si especifica p como si no lo hace. Esta sintaxis es útil para experimentar empezando con [pp,P] = csaps(x,y) y obtener una estimación inicial razonable de p.

Ejemplos

contraer todo

Ajuste splines de suavizado usando la función csaps con distintos valores del parámetro de suavizado p. Use valores de p entre los extremos 0 y 1 para comprobar cómo afectan a la forma y la proximidad al spline ajustado.

Cargue el conjunto de datos de titanio.

[x, y] = titanium();

Cuando p = 0, s0 es la línea que se ajusta a los datos por mínimos cuadrados. Cuando p = 1, s1 es la interpolación por splines cúbicos variacional (o natural).

Cuando 0 < p < 1, sp es un spline de suavizado que busca un acuerdo entre los dos extremos: es más suave que la interpolación s1 y más próximo a los datos que la línea s0.

p = 0.00009;

s0 = csaps(x,y,0);
sp = csaps(x,y,p);
s1 = csaps(x,y,1);
figure
fnplt(s0);
hold on
fnplt(sp);
fnplt(s1);
plot(x,y,'ko');
hold off
title('Smoothing splines with different values for p');
legend('p = 0', ['p = ' num2str( p )], 'p = 1', 'Location', 'northwest')

Figure contains an axes. The axes with title Smoothing splines with different values for p contains 4 objects of type line. These objects represent p = 0, p = 9e-05, p = 1.

Ajuste el parámetro de suavizado, las ponderaciones de medida de errores y las ponderaciones de medida de rugosidad.

Cree una curva sinusoidal con ruido.

x = linspace(0,2*pi,21); y = sin(x)+(rand(1,21)-.5)*.3;

Ajuste un spline de suavizado a los datos. Especifique el parámetro de suavizado p = 0.4 y las ponderaciones de medida de errores w que varían a lo largo de los datos.

pp = csaps(x,y,0.4,[],[ones(1,10),repmat(5,1,10), 0]);

La función devuelve un ajuste suave a los datos ruidosos que es mucho más próximo a los datos en la mitad derecha debido a que ahí la ponderación de medida de errores es mucho mayor. Tenga en cuenta que el último punto de datos queda excluido del ajuste al tener valor cero la ponderación del error.

Ahora, ajuste un spline de suavizado usando los mismos datos, parámetro de suavizado y ponderaciones de medida de errores, pero ajustando las ponderaciones de medida de rugosidad.

pp1 = csaps(x,y, [.4,ones(1,10),repmat(.2,1,10)], [], ...
                    [ones(1,10), repmat(5,1,10), 0]);

La ponderación de medida de rugosidad es solo de 0,2 en la mitad derecha del intervalo. Por tanto, el ajuste es más rugoso pero se aproxima mejor en el lado derecho de los datos (excepto el último punto de datos, que se ignora).

Represente ambos ajustes y compárelos.

figure
hold on
fnplt(pp, 'b'); 
fnplt(pp1,'r--')
plot(x,y,'ok')
hold off
ylim([-1.5 1.5])
title(['Cubic smoothing spline, with right half treated ',...
          'differently'])
legend('Larger error weight', 'Larger error and smaller roughness weight')

Figure contains an axes. The axes with title Cubic smoothing spline, with right half treated differently contains 3 objects of type line. These objects represent Larger error weight, Larger error and smaller roughness weight.

Ajuste un spline de suavizado a datos bivariados generados por la función peaks a la que se añade ruido uniforme. Use csaps para obtener los nuevos puntos de datos suavizados y los parámetros de suavizado que csaps determina para el ajuste.

Cree la cuadrícula. En este ejemplo, se trata de una cuadrícula uniforme de 51 por 61.

x = {linspace(-2,3,51),linspace(-3,3,61)};
[xx,yy] = ndgrid(x{1},x{2}); 

Genere los datos ruidosos usando la función peaks y números aleatorios en el intervalo [-12,12].

y = peaks(xx, yy);
noisy = y + (rand(size(y)) - 0.5);
figure
surf(xx,yy,noisy)
axis off

Ajuste los datos. Use csaps para obtener los valores de los datos suavizados evaluados en la cuadrícula x y el parámetro de suavizado predeterminado usado en el ajuste.

[sval,p] = csaps(x,noisy,[],x);

La gráfica del ajuste muestra que sigue habiendo cierta rugosidad. Tenga en cuenta que debe trasponer el arreglo sval.

figure
surf(x{1},x{2},sval.')
axis off

Para obtener una aproximación algo más suave, especifique un valor de p ligeramente menor que el valor predeterminado de csaps.

ssval = csaps(x,noisy,.996,x);
figure
surf(x{1},x{2},ssval.')
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

Parámetro de suavizado, especificado como un valor escalar entre 0 y 1 o como un arreglo de celdas de valores en el caso de datos multivariados. También puede especificar valores para las ponderaciones de medida de rugosidad λ proporcionando p como un vector. Para proporcionar las ponderaciones de medida de rugosidad en el caso de datos multivariados, use un arreglo de celdas de vectores. Si proporciona un arreglo vacío, la función elegirá un valor predeterminado de p a partir de los sitios de datos x y el valor predeterminado 1 para la ponderación de la medida de rugosidad λ.

El parámetro de suavizado determina la ponderación relativa que hay que dar a las exigencias contrapuestas de que f sea suave o que f se aproxime a los datos. Cuando p = 0, f es la línea que se ajusta a los datos por mínimos cuadrados. Cuando p = 1, f es la interpolación por splines cúbicos variacional (o natural). A medida que p se mueve de 0 a 1, el spline de suavizado cambia de un extremo a otro.

El rango favorable de p suele estar cerca de 1/(1 + h3/6) donde h es el espaciado promedio de los sitios de datos. La función elige un valor predeterminado de p dentro de este rango. En el caso de datos uniformemente espaciados, puede esperar un buen ajuste usando p = 1(1 + h3/60) y con un suavizado satisfactorio usando p = 1/(1 + h3/0,6). Puede usar p > 1, pero hacerlo genera un spline de suavizado aún más rugoso que la interpolación por splines cúbicos variacional.

Si el valor introducido de p es negativo o está vacío, la función usa el valor predeterminado de p.

Puede especificar las ponderaciones de medida de rugosidad λ junto con el parámetro de suavizado proporcionando p como un vector. Este vector debe tener el mismo tamaño que x y su i-ésima entrada debe tener el valor de λ en el intervalo (x(i-1)...x(i)), para i = 2:length(x). La primera entrada del vector introducido p es el valor deseado del parámetro de suavizado p. Proporcionando ponderaciones de medida de rugosidad, puede suavizar el spline de suavizado resultante (con mayores ponderaciones) o acercarlo a los datos (con menores ponderaciones) en distintas partes del intervalo. Las ponderaciones de medida de rugosidad no pueden ser negativas.

Si tiene problemas para elegir p, pero tiene una idea de la magnitud del ruido en y, considere usar spaps(x,y,tol) como alternativa. Esta función elige p, de forma que la medida de la rugosidad es mínima, a condición de que la medida de errores no supere tol. En este caso, la medida de errores normalmente es igual al valor especificado de tol.

Tipos de datos: single | double

Ponderaciones de la medida de errores w en la medida de errores, especificadas como un vector de entradas no negativas del mismo tamaño que x.

El valor predeterminado del vector de ponderaciones w de la medida de errores es ones(size(x)).

Puntos de evaluación en los que se evalúa el spline, especificados como un vector o un arreglo de celdas de vectores en el caso de datos multivariados. La evaluación del spline se lleva a cabo usando fnval.

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.

Spline evaluado, devuelto como un vector o como una matriz o arreglo en el caso de datos multivariados. El spline se evalúa en los puntos de evaluación xx proporcionados.

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. P se encuentra entre 0 y 1.

Algoritmos

csaps es una implementación de la rutina SMOOTH de Fortran en PGS.

El cálculo del spline de suavizado requiere resolver un sistema lineal cuya matriz de coeficientes tiene la forma p*A + (1-p)*B, donde las matrices A y B dependen de los sitios de datos x. El valor predeterminado de p hace que p*trace(A) sea igual a (1-p)*trace(B).

Consulte también

| |

Introducido antes de R2006a