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-массивами и |<reservedrangesplaceholder0>|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} должен быть пустым, в этом случае веса по умолчанию используются в ith переменная.

Примеры

свернуть все

В этом примере показано, как вычислить приближение методом наименьших квадратов к данным 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- указывает, что оно задано в B-форме.

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

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

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

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

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

Алгоритмы

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

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

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