exponenta event banner

tpaps

Сглаживающий шлиц из тонких пластин

Описание

пример

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

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

pE (f) + (1 p) 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-го аргумента, следовательно, integrand вовлекает вторые частные производные 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) 2≤1}.

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.

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

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

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

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

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

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

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

Ограничения

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

Представлен в R2006b