exponenta event banner

spaps

Сглаживание сплайна

Описание

пример

Примечание

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

sp = spaps(x,y,tol) возвращает B-форму наиболее гладкой функции f, которая находится в пределах заданного допуска tol заданных точек данных (x(j), y(:,j)), j=1:length(x). Значения данных y(:,j) скаляры, векторы, матрицы или даже ND-массивы. Точки данных с одним и тем же узлом данных заменяются их средневзвешенными значениями, при этом их вес представляет собой сумму соответствующих весов и допуск. tol соответственно уменьшается.

[sp,values] = spaps(x,y,tol) также возвращает сглаженные значения. values является таким же, как fnval(sp,x).

Здесь расстояние функции f от заданных данных измеряется

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

с выбором по умолчанию для весов w делая E (f) составным трапециевидным правилом аппроксимацию ∫min (x) max (x) | y − f | 2 и | z | 2, обозначающим сумму квадратов записей z.

Кроме того, самый гладкий означает, что следующая мера шероховатости сведена к минимуму:

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

где Dmf обозначает mth производная f. Значение по умолчанию для m является 2, значением по умолчанию для веса λ измерения шероховатости является константа 1, что делает f кубическим сглаживающим сплайном.

Когда tol является неотрицательным, то сплайн f определяется как уникальный минимизатор выражения startE (f) + F (Dmf), при этом параметр сглаживания (необязательно возвращаемый) выбирается таким образом, что E (f) равноtol. Следовательно, когда m является 2, то после преобразования в ppform результат должен быть таким же (вплоть до округления), как и полученный csaps (x, y, start/( start+ 1)). Далее, когдаtol равно нулю, то возвращается «естественный» или вариационный сплайновый интерполятор порядка 2m. Для достаточно больших tol, аппроксимация наименьших квадратов к данным по многочленам степени <m возвращается.

Когда tol является отрицательным, то -tol.

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

[sp,values,rho] = spaps(x,y,tol) также возвращает фактическое значение, используемое в качестве третьего выходного аргумента.

[...] = spaps(x,y,tol,w,m) позволяет указать весовой вектор w и/или целое число m, поставляя их в качестве argi. Для этого, w должен быть неотрицательным вектором того же размера, что и x; m должно быть 1 (для кусочно-линейного сглаживающего сплайна), или 2 (для кубического сглаживающего сплайна по умолчанию), или 3 (для квинтического сглаживающего сплайна).

Если результирующий сглаживающий сплайн sp должен вычисляться вне его базового интервала, его следует заменить на fnxtr(sp,m) для обеспечения того, чтобы его m-я производная равна нулю за пределами этого интервала.

пример

[...] = spaps({x1,...,xr},y,tol,...) возвращает B-форму r-вариативный сглаживающий сплайн тензора-произведения, который приблизительно находится в пределах заданного допуска к заданным данным с сеткой. Для разрозненных данных используйте tpaps. Сейчас y ожидается, что будут предоставлены соответствующие значения с сеткой, с size(y) равно [length(x1),...,length(xr)] в случае, если функция является скалярной и равна [d,length(x1),...,length(xr)] в случае, если функция d-значение. Далее, tol должен быть массивом ячеек с r записи, с tol{i} допуск, используемый во время i-й шаг при одномерном (но векторном) сглаживающем сплайне в iСтроится -я переменная. Дополнительный вход для m должно быть r-вектор (с записями из аппарата {1,2,3}) и необязательный вход для w должен быть массивом ячеек длиной r, с w{i} либо пустой (чтобы указать, что требуется выбор по умолчанию), либо положительный вектор той же длины, что и xi.

Примеры

свернуть все

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

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. The axes contains an object of type line.

Этот код использует те же данные и допуск, что и ранее, но выбирает только вес шероховатости. 0.1 в правой половине интервала и дает, соответственно, грубее, но лучше поместиться там.

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

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

Наконец, сравните два кубических сглаживающих сплайна, полученных ранее.

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. The axes with title Two cubic smoothing splines contains 3 objects of type line.

В этом примере получаются гладкие аппроксиманты шумных данных из гладкой двумерной функции. Обратите внимание на использование ndgrid здесь; использование meshgrid приведет к ошибке.

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

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

свернуть все

Месторасположения данных значений данных 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

Допуск заданных точек данных, заданный как скаляр.

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

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

Порядок производной, заданный как скаляр. Это значение должно быть либо 1 для кусочно-линейного сглаживающего сплайна, 2 для кубического сглаживающего сплайна по умолчанию или 3 для квинтического сглаживающего сплайна.

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

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

свернуть все

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

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

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

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

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

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

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

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

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

Алгоритмы

Эта функция использует подход Рейнша [1], включая его способ выбора уравнения для оптимального параметра сглаживания таким образом, чтобы было доступно хорошее начальное предположение и метод Ньютона гарантированно сходился и сходился быстро.

Ссылки

[1] С. Рейнш. «Сглаживание сплайновыми функциями». Номер. Математика 10 (1967), 177-183.

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