exponenta event banner

spap2

Аппроксимация сплайна методом наименьших квадратов

Описание

пример

spline = spap2(knots,k,x,y) возвращает B-форму сплайна f порядка k с заданной последовательностью узлов knots для которых

(*)   y(:,j) = f(x(j)), all j 

в взвешенном среднеквадратическом значении, означающем, что сумма

∑jw (j) | y (:, j) f (x (j)) | 2

минимизирован, вес по умолчанию равен 1. Значения данных y(:,j) могут быть скалярами, векторами, матрицами или ND-массивами, а | z | 2 - сумма квадратов всех записей z. Точки данных с одним и тем же сайтом заменяются их средним значением.

Если сайты x удовлетворить условиям Шёнберга-Уитни

          узлы (j) < x (j) < узлы (j  +  k )   (*   *)  j  =  1 , . . . ,       длина  ( x) = длина (узлы) − k

тогда имеется уникальный сплайн заданного порядка и узловой последовательности, удовлетворяющий (*) точно. Сплайн не возвращается, если (* *) не удовлетворяется для некоторой подпоследовательности x.

spap2(l,k,x,y) , с l положительное целое число, возвращает B-форму аппроксиманта сплайна наименьших квадратов, но с выбранной для вас последовательностью узлов. Последовательность узлов получают нанесением aptknt к соответствующей подпоследовательности x. Полученный кусочно-многочлен состоит из l полиномиальные части и имеет k-2 непрерывные производные. Если вы чувствуете, что другое распределение внутренних узлов может сделать лучшую работу, следите за этим с

sp1 = spap2(newknt(spline),k,x,y));

spline = spap2(...,x,y,w) позволяет указать веса w в измерении ошибки (приведенном выше). w должен быть вектором того же размера, что и x, с неотрицательными записями. Все веса, соответствующие точкам данных с одним и тем же сайтом, суммируются, когда эти точки данных заменяются их средним значением.

spap2({knorl1,...,knorlm},k,{x1,...,xm},y) обеспечивает аппроксимацию сплайна методом наименьших квадратов для данных с сеткой. Здесь, каждый knorli является либо узловой последовательностью, либо положительным целым числом. Далее, k должно быть m-вектор, и y должен быть (r+m) -мерный массив, сy(:,i1,...,im) опорный элемент, устанавливаемый на site [x{1}(i1),...,x{m}(im)], все i1, ..., im. Однако если сплайн должен быть скалярным, то, в отличие от одномерного случая, y разрешено быть m-мерный массив, в этом случае y(i1,...,im) - опорный элемент, устанавливаемый на site [x{1}(i1),...,x{m}(im)], все i1, ..., im.

spap2({knorl1,...,knorlm},k,{x1,...,xm},y,w) также позволяет указать веса. В этом m-вариативный случай, w должен быть массивом ячеек с m записи, с w{i} неотрицательный вектор того же размера, что и xi, или иначе w{i} должен быть пустым, в этом случае веса по умолчанию используются в i-я переменная.

Примеры

свернуть все

В этом примере показано, как вычислить приближение наименьших квадратов к данным x, y, кубическими сплайнами с двумя непрерывными производными, базовый интервал [a..b], и внутренние разрывы xi, при условии xi имеет все свои записи в (a..b) и условия (* *) выполнены .

sp = spap2(augknt([a,xi,b],4),4,x,y)

В этом случае аппроксимация состоит из length(xi)+1 отрезки полинома. Если требуется получить только аппроксимацию кубического сплайна, состоящую из l участки полинома, используйте вместо

sp = spap2(l,4,x,y); 

Если результирующая аппроксимация неудовлетворительна, попробуйте использовать большую l. Другое использование

sp = spap2(newknt(sp),4,x,y);

для лучшего распределения последовательности узлов. Повторите этот процесс несколько раз, чтобы повысить точность распределения.

В качестве другого примера: spap2(1,2,x,y); обеспечивает прямую подгонку наименьших квадратов к данным x,y, пока

w = ones(size(x)); 
w([1 end]) = 100; 
spap2(1,2,x,y,w); 

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

В этом примере показано, как создать двумерную функцию, вычислить и построить ее аппроксимацию наименьшим квадратом.

Создайте данные для аппроксимации и двумерной функции.

x = -2:.2:2; 
y=-1:.25:1; 
[xx, yy] = ndgrid(x,y); 
z = exp(-(xx.^2+yy.^2)); 

Вычислите приближение наименьшего квадрата и постройте его график.

sp = spap2({augknt([-2:2],3),2},[3 4],{x,y},z);
fnplt(sp)

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

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

свернуть все

Узловая последовательность сплайна, заданная как вектор без возрастания.

Порядок сплайна f, заданный как скаляр.

Число многочленов полученного кусочно-многочлена, заданное как положительное целое число.

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

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

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

свернуть все

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

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

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

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

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

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

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

Алгоритмы

spcol вызывается для обеспечения почти блок-диагональной матрицы коллокации (Bj, k (xi)), иslvblk решает линейную систему (*) в (взвешенном) смысле наименьших квадратов, используя блок QR-факторизации.

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

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