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)|yf|2, и |<reservedrangesplaceholder0>|2 обозначающая сумму квадратов значений z.

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

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

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

Когда tol является неотрицательной, затем f сплайна определяется как уникальный минимайзер выражения E (f) + F (Dmf), с параметром сглаживания, (опционально возвращенным) таким образом выбранным, чтобы E (f) равнялось tol. Следовательно, когда m является 2, затем, после преобразования в ppform, результат должен быть таким же (вплоть до round-off), как получен csaps (x, y, Далее, когда tol равен нулю, затем возвращается «естественная» или вариационная сплайн интерполяция порядка 2 m. Для достаточно больших 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-variate tensor-product сглаживание сплайна, который находится примерно в пределах заданного допуска к данным с сеткой. Для данных , имеющих разбросов используйте 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- указывает, что сплайн задан в B-форме.

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

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

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

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

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

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

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

Алгоритмы

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

Ссылки

[1] C. Reinsch. Сглаживание сплайн. Числитель. Математика 10 (1967), 177-183.

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