csape

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

Синтаксис

pp = csape(x,y)
pp = csape(x,y,conds)
pp = csape(x,[e1,y,e2],conds)
pp = csape({x1,...,xn},___)

Описание

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). Конкатенация этих значений граничного условия в respecive концах 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

Стационарная точка около точки 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) as векторное значение в координатном 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) = x 3y3 полной бикубической интерполяцией. Вы затем выводите необходимые данные, включая значения граничного условия, непосредственно от 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', 'second', '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, эта опция использует defualt значение 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

кривой

D 2s (e) = ej

if conds(j) == 2

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

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

if conds == [0 0]

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

D 2s (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

Для просмотра документации необходимо авторизоваться на сайте