exponenta event banner

csaps

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

Описание

Примечание

Для более простого, но менее гибкого метода создания сглаживающих сплайнов воспользуйтесь приложением «Фитинг кривой» или fit функция.

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

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

p∑j=1nwj'yj−f (xj)  |2︸error мера + (1 p) ∫λ (t) | D2f (t) |2dt︸roughness мера

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

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

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

пример

pp = csaps(x,y,p) задает параметр сглаживания p. Вы также можете предоставить вес измерения шероховатости λ, предоставив p как вектор, первая запись которого p и iВ-й вход - значение λ на интервале (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-переменный шлиц сглаживания тензора-произведения для данных прямоугольной сетки, описанной {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 является реализацией подпрограммы Fortran SMOOTH от PGS.

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

См. также

| |

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