tpaps

Тонкопластинчатый сглаживающий сплайн

Описание

пример

st = tpaps(x,y) является формой тонкоплитного сглаживающего сплайна, f для заданных сайтов данных x(:,j) и заданные значения данных y(:,j). The x(:,j) должны быть различными точками в плоскости, значения могут быть скалярами, векторами, матрицами, даже ND-массивами, и должно быть ровно столько значений, сколько есть сайтов.

Тонкопластинчатый сглаживающий сплайн f является уникальным минимизатором взвешенной суммы

pE(f)+(1p)R(f)

с E (f) мерой ошибки

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

и R (f) измерение шероховатости

R(f)=(|D1D1f|2+2|D1D2f|2+|D2D2f|2)

Здесь интеграл берется за все R2, | z |2 обозначает сумму квадратов всех записей z, а Dif обозначает частную производную f относительно его i-го аргумента, следовательно, интегрант включает вторые частные производные f. Функция выбирает параметр сглаживания p так что (1-p)/p равен среднему значению диагональных элементов матрицы A, с A + (1-p)/p*eye(n) матрица коэффициентов линейной системы для n коэффициенты сглаживающего сплайна, которые будут определены. Это обеспечивает пребывание между двумя крайностями интерполяции (когда p близок к 1 и матрица коэффициентов по существу A) и полное сглаживание (когда p близок к 0 и матрица коэффициентов по существу является произведением матрицы тождеств). Это служит хорошим первым предположением для p.

пример

st = tpaps(x,y,p) также вводит параметр сглаживания, p, число от 0 до 1. Когда параметр сглаживания изменяется от 0 до 1, сглаживающий сплайн изменяется, от приближения методом наименьших квадратов до данных линейным полиномом при p является 0, к тонкопластинчатой сплайн интерполяции к данным при p является 1.

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

Примеры

свернуть все

Следующий код получает значения сглаженной функции на 31 случайным образом выбранных сайтах, добавляет к этим значениям некоторый случайный шум и затем использует tpaps чтобы восстановить базовые точные плавные значения. Чтобы проиллюстрировать, насколько хорошо tpaps делает в этом случае код строит, в дополнение к сглаживающему сплайну, точные значения (как черные мячи), а также каждую стрелу, ведущую от сглаженного значения к соответствующему шумовому значению.

rng(23); nxy = 31;
xy = 2*(rand(2,nxy)-.5); vals = sum(xy.^2);
noisyvals = vals + (rand(size(vals))-.5)/5;
st = tpaps(xy,noisyvals); fnplt(st), hold on
avals = fnval(st,xy);
plot3(xy(1,:),xy(2,:),vals,'wo','markerfacecolor','k')
quiver3(xy(1,:),xy(2,:),avals,zeros(1,nxy),zeros(1,nxy), ...
         noisyvals-avals,'r'), hold off

Figure contains an axes. The axes contains 3 objects of type surface, line, quiver.

Следующий код использует интерполяцию сплайна тонкого диска к векторным значениям данных, чтобы создать карту, от плоскости к плоскости, которая несет единичный квадрат {x:|x(j)|1,j=1:2} приблизительно на единичный диск {x:x(1)2+x(2)21}.

n = 64; t = linspace(0,2*pi,n+1); t(end) = [];
values = [cos(t); sin(t)];
centers = values./repmat(max(abs(values)),2,1);
st = tpaps(centers, values, 1);
fnplt(st), axis equal

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

Обратите внимание на выбор 1 для параметра сглаживания здесь, чтобы получить интерполяцию.

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

свернуть все

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

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

Значения данных для подгонки во время создания сплайна, заданные как вектор, матрица или массив. Значения данных 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

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

свернуть все

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

Форма сплайна, возвращенная как st-tp00, st-tp10, st-tp01, или st-tp.

Последовательность сайтов, возвращенная в виде матрицы или массива для многомерных данных.

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

Количество последовательностей сайтов.

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

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

Основной интервал для формы, которая содержит все указанные центры, возвращенный как массив.

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

Ограничения

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

Введенный в R2006b