csaps

Кубическое сглаживание сплайна

Описание

Примечание

Для более простого, но менее гибкого метода, чтобы сглаживать сплайны, попробуйте приложение Аппроксимирование Кривыми или fit функция.

pp = csaps(x,y) возвращает кубическую интерполяцию сплайна сглаживания к заданным данным (x,y) в pform. Значение сплайна, f в сайте данных x(j) аппроксимирует значение данных y(:,j) для j = 1:length(x).

Сглаживающий сплайн f минимизирует

pj=1nwj|yjf(xj)|2 мера ошибки+(1p)λ(t)|D2f(t)|2dt мера шероховатости

Здесь n количество записей x и интеграл находится на наименьшем интервале, содержащем все значения x. y j и x j относятся к j-м элементам y и x, соответственно. D2f обозначает вторую производную от f функции.

Значения по умолчанию для весов w j измерения ошибки 1. Значение по умолчанию для кусочно-постоянной функции веса, λ в измерении шероховатости, является постоянной функцией 1. По умолчанию csaps выбирает значение для параметра сглаживания p основываясь на заданных сайтах данных x.

Чтобы вычислить сглаживающий сплайн вне его основного интервала, необходимо сначала экстраполировать его. Используйте команду pp = fnxtr(pp) чтобы убедиться, что вторая производная равна нулю вне интервала, охватываемого сайтами данных.

пример

pp = csaps(x,y,p) задает параметр сглаживания p. Можно также задать веса измерений шероховатости λ путем предоставления p как вектор, чья первая запись p и ith entry - значение λ на интервале (x(i-1),x(i)).

пример

pp = csaps(x,y,p,[],w) также задает веса w в измерении ошибки.

пример

values = csaps(x,y,p,xx) использует параметр сглаживания p и возвращает значения сглаживающего сплайна, рассчитанные в точках xx. Этот синтаксис аналогичен fnval(csaps(x,y,p),xx).

values = csaps(x,y,p,xx,w) использует параметр сглаживания p и веса измерений ошибок w, и возвращает значения сглаживающего сплайна, рассчитанные в точках xx. Этот синтаксис аналогичен fnval(csaps(x,y,p,[],w),xx)

[___] = csaps({x1,...,xm},y,___) предоставляет ppform m-variate tensor-product сглаживание сплайна к данным на прямоугольной сетке, описанным {x1,...,xm}. Можно использовать этот синтаксис с любым из аргументов в предыдущих синтаксисах.

пример

[___,P] = csaps(___) также возвращает значение параметра сглаживания, используемого в конечном результате сплайна, задаете ли вы или нет p. Этот синтаксис полезен для экспериментов, в которых можно начать с [pp,P] = csaps(x,y) и получите разумное первое предположение для p.

Примеры

свернуть все

Подгонка сглаживающих сплайнов с помощью csaps функция с различными значениями для параметра сглаживания p. Используйте значения p между крайностями 0 и 1, чтобы увидеть, как они влияют на форму и близость установленного сплайна.

Загрузите набор данных о титане.

[x, y] = titanium();

Когда p = 0, s0 - прямая линия методом наименьших квадратов, подобранная к данным. Когда p = 1, s1 - вариационная, или естественная, кубическая сплайн интерполяция.

Для 0 < p < 1, sp является сглаживающим сплайном, который является компромиссом между двумя крайностями: более плавным, чем интерполяция s1 и ближе к данным, чем прямая линия 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.

Настройте параметр сглаживания, веса измерения ошибки и веса измерения шероховатости.

Создайте синусоидальную кривую с шумом.

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

Подбор сглаживающего сплайна к данным. Задайте параметр сглаживания p = 0.4 и веса измерений ошибок w которые варьируются в зависимости от данных.

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

Функция возвращает плавную подгонку к зашумленным данным, которые намного ближе к данным в правой половине из-за гораздо большей ошибки измеряют вес там. Обратите внимание, что взвешивание ошибок нуля для последней точки данных исключает эту точку из подгонки.

Теперь подгоните сглаживающий сплайн с помощью тех же данных, параметра сглаживания и весов измерения ошибки, но с скорректированными весами измерения шероховатости.

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

Вес измерения шероховатости составляет всего 0,2 в правой половине интервала. Соответственно, подгонка является более грубой, но более близкой к правой стороне данных (за исключением последней точки данных, которая игнорируется).

Постройте график обоих подгонка для сравнения.

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.

Подбор сглаживающего сплайна к двухмерным данным, сгенерированным peaks функция с добавлением равномерного шума. Использование csaps для получения новых сглаженных точек данных и параметров сглаживания csaps определяет для подгонки.

Создайте сетку. В данном примере сетка представляет собой однородную сетку 51 на 61.

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

Сгенерируйте зашумленные данные, используя peaks функция и случайные числа в интервале [-12,12].

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

Подгонка данных. Использование csaps для получения значений сглаженных данных, рассчитанных по сетке x и параметр сглаживания по умолчанию, используемый в подгонке.

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

График подгонки показывает, что остается некоторая шероховатость. Обратите внимание, что необходимо транспонировать массив sval.

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

Для несколько более плавного приближения задайте значение для p что немного меньше, чем csaps значение по умолчанию.

ssval = csaps(x,noisy,.996,x);
figure
surf(x{1},x{2},ssval.')
axis off

Входные параметры

свернуть все

Сайты данных значений данных y для подгонки, заданной как вектор или как массив ячеек для многомерных данных. Сплайн f создается с узлами в каждом сайте данных x таким образом f (x(j)) = y(:,j) для всех значений j.

Для многомерных данных с сеткой можно задать x как массив ячеек, который задает узел данных в каждой переменной размерности: f (x1(i),x2(j),...xn(k)) = y(:,i,j,...,k).

Типы данных: single | double

Значения данных для подгонки во время создания сплайна, заданные как вектор, матрица или массив. Значения данных y(:,j) могут быть скалярами, матрицами или n -мерными массивами. Значения данных, заданные на том же сайте данных x усредняются.

Типы данных: single | double

Параметр сглаживания, заданный как скалярное значение между 0 и 1 или как массив ячеек значений для многомерных данных. Можно также задать значения для весов измерения шероховатости λ путем предоставления p как вектор. Чтобы обеспечить веса измерения шероховатости для многомерных данных, используйте массив ячеек из векторов. Если вы предоставляете пустой массив, функция выбирает значение по умолчанию для p на основе сайтов данных x и значение по умолчанию 1 для весовой λ измерения шероховатости.

Параметр сглаживания определяет относительный вес, чтобы разместить на противоречивых требованиях, f быть плавным или f быть близким к данным. Для p = 0, f - прямая подгонка методом наименьших квадратов к данным. Для p = 1, f является вариационной, или естественной, кубической сплайн интерполяцией. Как p перемещается от 0 до 1, сглаживающий сплайн изменяется с одного крайнего на другой.

Благоприятная область значений для p часто находится вблизи 1/( 1 + h3/ 6), где h является средним интервалом между сайтами данных. Функция выбирает значение по умолчанию для p в этой области значений. Для данных с равномерными интервалами можно ожидать близкой подгонки с p = 1 (1 + h3/ 60) и некоторое удовлетворительное сглаживание при p = 1/( 1 + h3/0.6). Можно вводить p > 1, но этот выбор приводит к сглаживанию сплайна даже грубее, чем вариационная кубическая сплайн интерполяция.

Если вход p отрицательно или пусто, тогда функция использует значение по умолчанию для p.

Можно задать веса измерения шероховатости λ наряду с параметром сглаживания путем предоставления p как вектор. Этот вектор должен быть того же размера, что и x, с iвведите значение λ на интервале (x(i-1)...x(i)), для i = 2:length(x). Первая запись входного вектора p является желаемым значением параметра гладкости p. Предоставляя веса измерения шероховатости, можно сделать полученный сглаживающий сплайн более плавным (с большими значениями веса) или ближе к данным (с меньшими значениями веса) в различных частях интервала. Веса измерений шероховатости должны быть неотрицательными.

Если у вас есть трудности с выбором p но иметь некоторое чувство для размера шума в y, рассмотрите использование spaps(x,y,tol) вместо этого. Эта функция выбирает p такая, чтобы мера шероховатости была как можно меньше при условии, что мера ошибки не превышает tol. В этом случае мера ошибки обычно равняется заданному значению для tol.

Типы данных: single | double

Веса измерения ошибки, w в мере ошибки, заданные как вектор неотрицательных записей того же размера, что и x.

Значение по умолчанию для вектора веса w в мере ошибки ones(size(x)).

Оценочные точки, над которыми вычисляется сплайн, заданные как вектор или как массив ячеек векторов для многомерных данных. Оценка сплайна выполняется с помощью fnval.

Типы данных: single | double

Выходные аргументы

свернуть все

Сплайн в ppform, возвращается как структура с этими полями.

Форма сплайна, возвращенная как pp. pp указывает, что сплайн задан в кусочный полином форме.

Узловые положения сплайна, возвращенные как вектор или как массив ячеек векторов для многомерных данных. Векторы содержат строго увеличивающиеся элементы, которые представляют начало и конец каждого из интервалов, над которыми заданы полиномиальные части.

Коэффициенты полиномов для каждой части, возвращенные как матрица или как массив для многомерных данных.

Количество полиномиальных частей, описывающих сплайн, возвращаемое в виде скаляра или в виде вектора из числа частей в каждой переменной для многомерных данных.

Порядок полиномиальной функции, описывающей каждую полиномиальную часть сплайна, возвращаемый как скаляр или как вектор, содержащий порядок в каждой переменной для многомерных данных.

Размерность целевой функции, возвращенной как скаляр.

Вычисленный сплайн, возвращенный как вектор или как матрица или массив для многомерных данных. Сплайн оценивается в заданных точках оценки xx.

Параметр сглаживания, используемый для вычисления сплайна, возвращенный как скаляр или как массив ячеек скалярных значений для многомерных данных. P находится между 0 и 1.

Алгоритмы

csaps является реализацией стандартной программы Фортран SMOOTH от PGS.

Вычисление сглаживающего сплайна требует решения линейной системы, матрица коэффициентов которой имеет вид p*A + (1-p)*B, с матрицами A и B в зависимости от сайтов данных x. Значение по умолчанию p делает p*trace(A) равные (1-p)*trace(B).

См. также

| |

Представлено до R2006a