spaps

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

Описание

пример

Примечание

Для более простого, но менее гибкого метода, чтобы сгенерировать сплайны сглаживания, попробуйте приложение Curve Fitting или 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, и |z|2, обозначающий сумму квадратов записей z.

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

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

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

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

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

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

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

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

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

пример

[...] = 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- th продвигаются когда одномерное (но с векторным знаком) сглаживающий сплайн в i- переменная th создается. Дополнительный вход для 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)

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

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

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

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.')

Этот пример производит сглаженную аппроксимирующую функцию для зашумленных данных от сглаженной двумерной функции. Отметьте использование 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 для quintic, сглаживающего сплайн.

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

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

свернуть все

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

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

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

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

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

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

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

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

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

Алгоритмы

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

Ссылки

[1] К. Рейнш. "Сглаживание функциями сплайна". Numer. Математика. 10 (1967), 177–183.

Смотрите также

| | |

Представлено до R2006a
Для просмотра документации необходимо авторизоваться на сайте