csape

Интерполяция кубическим сплайном с граничными условиями

Описание

pp = csape(x,y) возвращает интерполяцию кубическим сплайном в определенные данные (x,y) в форме ppform. Функция применяет Лагранжевы граничные условия к каждому концу данных и совпадает со сплайном endslopes к наклону кубического полинома, который соответствует последним четырем точкам данных в каждом конце. Значения данных на том же сайте усреднены.

пример

pp = csape(x,y,conds) использует граничные условия, заданные conds.

пример

pp = csape(x,[e1,y,e2],conds) использует граничные условия, заданные conds и значения e1 и e2 для левых и правых значений граничного условия, соответственно.

пример

pp = csape({x1,...,xn},___) возвращается интерполяция кубическим сплайном для данных с координатной сеткой с помощью одномерной mesh вводит x1,...,xn. В этом случае, y n+r- размерный массив, где r размерность каждого значения данных. conds массив ячеек с n записи, который обеспечивает граничные условия для каждого n переменные. В некоторых случаях необходимо предоставить граничные условия для граничных условий. Можно использовать этот синтаксис с любым из аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Можно реализовать пользовательские граничные условия с помощью csape функция. Предположим, что вы хотите осуществить следующее условие в крайней левой конечной точке, e=x(1)

λ(s)aDs(e)+bD2s(e)=c

для данных скаляров a,b, и c. Можно вычислить кубическую интерполяцию позвоночника s как сумма s1 (кубическая интерполяция позвоночника определенных данных с помощью граничных условий по умолчанию) и s0 (кубическая интерполяция позвоночника нулевых данных с помощью некоторых нетривиальных граничных условий):

s=s1+c-λ(s1)λ(s0)s0

Граничные условия вы задаете в s0 не должны быть желаемые граничные условия финала λ(s).

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

[x,y] = titanium;

Задайте коэффициенты для λ(s).

a = -2;
b = -1;
c = 0;

Граничное условие применяется к крайнему левому концу набора данных.

e = x(1);

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

s1 = csape(x,y);

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

yZero = zeros(1,length(y));

1 2 матричный conds устанавливает граничные условия путем определения производных сплайна, чтобы зафиксировать. Этот пример использует граничные условия только на левом конце данных, так используйте conds зафиксировать первую производную в левом конце. В правильном конце зафиксируйте значение самой функции.

conds = [1 0];

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

В левом конце зафиксируйте первую производную сплайна, чтобы иметь значение 1. В правильном конце зафиксируйте саму функцию, чтобы быть 0 (исходное значение итогового элемента yZero). Конкатенация этих значений граничного условия в соответствующих концах yZero и используйте csape найти сплайн, который соответствует данным этими значениями граничного условия.

s0 = csape(x,[1 yZero 0],conds);

Вычислите полностью подходящий сплайн из тех данных при помощи вышеупомянутого выражения для s. Для этого вычислите значения для λ0=λ(s0) и λ1=λ(s1) использование первых и вторых производных сплайнов s0 и s1.

d1s1 = fnder(fnbrk(s1,1));
d2s1 = fnder(d1s1);
d1s0 = fnder(fnbrk(s0,1));
d2s0 = fnder(d1s0);

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

lam1 = a*fnval(d1s1, e) + b*fnval(d2s1,e);
lam0 = a*fnval(d1s0, e) + b*fnval(d2s0,e);

Теперь используйте λ1 и λ0 вычислить финал, полностью адаптированный сплайн.

pp = fncmb(s0,(c-lam1)/lam0,s1);

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

fnplt(pp,[594, 632])
hold on
fnplt(s1,'b--',[594, 632])
plot(x,y,'ro','MarkerFaceColor','r')
hold off
axis([594, 632, 0.62, 0.655])
legend 'Desired end conditions' ...
'Default end-conditions' 'Data' ...
    Location SouthEast

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Desired end conditions, Default end-conditions, Data.

Стационарная точка около точки First Data показывает, что граничные условия реализованы в подгонке.

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

Во-первых, задайте данные. В данном примере задайте 3-мерные векторы v по 2-мерному полю, с зафиксированными условиями или предписанными наклонами в x направление и периодические граничные условия в y направление.

x = 0:4;
y = -2:2;

s2 = 1/sqrt(2);

v = zeros( 3, 7, 5 );
v(1,:,:) = [1 0 s2 1 s2 0 -1].'*[1 0 -1 0 1];
v(2,:,:) = [1 0 s2 1 s2 0 -1].'*[0 1 0 -1 0];
v(3,:,:) = [0 1 s2 0 -s2 -1 0].'*[1 1 1 1 1];

v 3-мерный массив с v(:,i+1,j) как векторное значение в координатном x(i),y(j). Две дополнительных записи в x размерность задает наклонные значения: точки данных v(:,1,j) и v(:,7,j) введите значение первой производной вдоль линий x = 0 и x = 4 для зафиксированных граничных условий. В y размерность, периодические граничные условия не требуют никакой дополнительной спецификации.

Теперь вычислите многомерную интерполяцию кубическим сплайном с помощью csape.

sph = csape({x,y},v,{'clamped','periodic'});

Чтобы построить результат, сначала оцените сплайн на подходящем интервале.

values = fnval(sph,{0:.1:4,-2:.1:2});

surf(squeeze(values(1,:,:)), ...
squeeze(values(2,:,:)), squeeze(values(3,:,:)));

axis equal
axis off

Можно также оценить и построить поверхность сплайна использование простой команды fnplt(sph). Обратите внимание на то, что v 3-мерный массив и v(:,i+1,j) с 3 векторами должен соответствовать в (x(i),y(j)), i=1:5, j=1:5. Кроме того, в соответствии с conds{1} быть 'clamped', size(v,2) 7 (а не 5), и первая и последняя запись v(r,:,j) задайте значения наклона конца.

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

sites = {[0 1],[0 2]}; coefs = zeros(4, 4); coefs(1,1) = 1;
g = ppmak(sites,coefs);
Dxg = fnval(fnder(g,[1 0]),sites);
Dyg = fnval(fnder(g,[0 1]),sites);
Dxyg = fnval(fnder(g,[1 1]),sites);

f = csape(sites,[Dxyg(1,1),   Dxg(1,:),    Dxyg(1,2); ...
                 Dyg(:,1), fnval(g,sites), Dyg(:,2) ; ...
                 Dxyg(2,1),   Dxg(2,:),    Dxyg(2,2)], ...
                                          {'complete','complete'});
if any(squeeze(fnbrk(f,'c'))-coefs)
    disp( 'this is wrong' )
end

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

свернуть все

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

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

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

Значения данных, чтобы соответствовать во время создания сплайна в виде вектора, матрицы или массива. Можно задать значения данных y(:,j) как скаляры, матрицы или n - размерные массивы. Значения данных, данные на том же сайте данных x усреднены.

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

Граничные условия для сплайна в виде 'complete' или 'clamped', 'not-a-knot', 'periodic'второй, 'variational', или как 1 2 матрица. Предопределенные опции для conds наложите идентичные граничные условия в каждом конце данных. Можно задать различные граничные условия в каждом конце путем предоставления conds как 1 2 матрица.

Доступные предопределенные граничные условия следующие.

'complete' or 'clamped'

Совпадайте с endslopes к данным значениям e1 и e2. Если вы не вводите значения для e1 и e2, эта опция совпадает с лагранжевыми граничными условиями по умолчанию.

'not-a-knot'

Сделайте вторые и предпоследние сайты неактивными узлами. Эта опция игнорирует любые значения, вы предусматриваете e1 и e2.

'periodic'

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

'second'

Совпадайте с концом вторые производные к данным значениям e1 и e2. Если вы не вводите значения e1 и e2, эта опция использует значение по умолчанию 0 для обоих. Со значениями по умолчанию эта опция совпадает с 'variational'.

'variational'

Установите конец вторые равные нулю производные. Эта опция игнорирует любые значения, вы предусматриваете e1 и e2.

Чтобы задать различные граничные условия в каждом конце, предоставьте conds как 1 2 матрица. Элементы этого элементы матрицы задают порядок производной сплайна, зафиксированной граничными условиями. Установка conds(j) = i фиксирует i th производная Dis к значению граничного условия.

Значение граничного условия по умолчанию является производной кубического interpolant в левых четыре сайта когда conds(1) = 1 и 0 в противном случае. Установите значения граничного условия для левых и правых сторон данных путем определения e1 и e2, соответственно.

Можно задать значение conds(j) как 0, 1, или 2. Если вы задаете различное значение или не задаете conds(j), затем conds(j) 1 и соответствующее значение граничного условия является значением по умолчанию.

Следующие предопределенные граничные условия доступны.

зафиксированный

Ds (e) = ej

if conds(j) == 1

кривой

D2s (e) = ej

if conds(j) == 2

периодический

Drs (a) = Drs (b), r = 1,2

if conds == [0 0]

вариационный

D2s (e) = 0

if conds(j) == 2 & ej == 0

e, a и b относятся к левым или правым местоположениям данных; ej e1 для левого конца данных и e2 для правильного конца данных.

Можно предоставить дополнительные значения граничного условия e1 и e2 используете ли вы предопределенные или пользовательские опции для conds. Однако обратите внимание что некоторые предопределенные опции conds проигнорируйте любые значения граничного условия, которые вы вводите.

Пример: 'clamped', [1 0]

Оставленное значение граничного условия для сплайна в виде скалярного значения. e1 задает значение для i th производная в левом конце данных, где conds обеспечивает i. Даже если вы используете различные граничные условия в двух концах, если вы предоставляете значение граничного условия в одном конце, необходимо также предоставить один для другого конца.

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

Значение по умолчанию для e1 производная кубического interpolant в левых четыре сайта когда conds(1) = 1 и 0 в противном случае.

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

Правильное значение граничного условия для сплайна в виде скалярного значения. e2 задает значение для i th производная в правильном конце данных, где conds обеспечивает i. Даже если вы используете различные граничные условия в двух концах, если вы предоставляете значение граничного условия в одном конце, необходимо также предоставить один для другого конца.

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

Значение по умолчанию для e2 производная кубического interpolant на правильных четырех сайтах когда conds(2) = 1 и 0 в противном случае.

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

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

свернуть все

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

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

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

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

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

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

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

Алгоритмы

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

csape команда обращается к очень расширенной версии стандартной программы Фортрана CUBSPL в PGS.

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

| |

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