Интерполяция кубическим сплайном с граничными условиями
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 к наклону кубического, которое соответствует последним четырем точкам данных в каждом конце. Значения данных на том же сайте усреднены.
возвращается интерполяция кубическим сплайном для данных с координатной сеткой с помощью одномерной mesh вводит pp
= csape({x1,...,xn},___)x1,...,xn
. В этом случае y
является n+r
- размерный массив, где r
является размерностью каждого значения данных. conds
является массивом ячеек с записями n
, который обеспечивает граничные условия для каждой из переменных n
. В некоторых случаях необходимо предоставить граничные условия для граничных условий. Можно использовать этот синтаксис с любым из аргументов в предыдущих синтаксисах.
csape
Можно реализовать пользовательские граничные условия с помощью функции csape
. Предположим, что вы хотите осуществить следующее условие в крайней левой конечной точке, x(1)
для данных скаляров ,, и . Можно вычислить кубическую интерполяцию позвоночника как сумма (кубическая интерполяция позвоночника определенных данных с помощью граничных условий по умолчанию) и (кубическая интерполяция позвоночника нулевых данных с помощью некоторых нетривиальных граничных условий):
Граничные условия вы задаете в не должны быть желаемые граничные условия финала .
Этот пример использует тестовые данные титана, стандартный набор данных, используемый в подборе кривой данных. Загрузите данные с помощью функции titanium
.
[x,y] = titanium;
Задайте коэффициенты для .
a = -2; b = -1; c = 0;
Граничное условие применяется к крайнему левому концу набора данных.
e = x(1);
Теперь, вычислите интерполяцию кубическим сплайном набора данных, не налагая граничные условия.
s1 = csape(x,y);
Вычислять , используйте нулевые данные той же длины как 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);
Вычислите полностью подходящий сплайн от тех данных при помощи вышеупомянутого выражения для . Для этого вычислите значения для и использование первых и вторых производных сплайнов и .
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);
Теперь используйте и вычислить финал, полностью адаптированный сплайн.
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
x
Сайты данныхСайты данных значений данных y
, чтобы соответствовать, заданный как вектор или как массив ячеек для многомерных данных. Функция создает сплайн узлы s на каждом сайте данных x
, таким образом что s (x(j)
) = y(:,j)
для всего j
.
Для многомерных, данных с координатной сеткой задайте x
как массив ячеек, который обеспечивает сайт данных в каждой переменной размерности, такой что s (x1(i),x2(j),...,xn(k)
) = y(:,i,j,...,k)
.
Типы данных: single | double
y
Значения данных, чтобы соответствоватьЗначения данных, чтобы соответствовать во время создания сплайна, заданного как вектор, матрица или массив. Можно задать значения данных y(:,j)
как скаляры, матрицы или n - размерные массивы. Усреднены значения данных, данные на том же сайте данных x
.
Типы данных: single | double
conds
— Граничные условия'clamped'
| 'complete'
| 'not-a-knot'
| 'periodic'
| 'second'
| 'variational'
| 1 2 матрицаГраничные условия для сплайна, заданного как 'complete'
или 'clamped'
, 'not-a-knot'
, 'periodic'
, 'second'
, 'variational'
, или как 1 2 матрица. Предопределенные опции для conds
налагают идентичные граничные условия в каждом конце данных. Можно задать различные граничные условия в каждом конце путем предоставления conds
как 1 2 матрица.
Доступные предопределенные граничные условия следующие.
| Совпадайте с endslopes к данным значениям |
Сделайте вторые и предпоследние сайты неактивными узлами. Эта опция игнорирует любые значения, вы предусматриваете | |
| Совпадайте с первыми и вторыми производными в левом конце с теми в правильном конце. |
| Совпадайте с концом вторые производные к данным значениям |
| Установите конец вторые равные нулю производные. Эта опция игнорирует любые значения, вы предусматриваете |
Чтобы задать различные граничные условия в каждом конце, предоставьте 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) = |
|
кривой | D 2s (e) = |
|
периодический | Drs (a) = Drs (b), r = 1,2 |
|
вариационный | D 2s (e) = 0 |
|
e, a и b относятся к левым или правым местоположениям данных; ej
является e1
для оставленного конца данных и e2
для правильного конца данных.
Можно предоставить дополнительные значения граничного условия e1
и e2
, используете ли вы предопределенные или пользовательские опции для conds
. Однако обратите внимание, что некоторые предопределенные опции для conds
игнорируют любые значения граничного условия, которые вы обеспечиваете.
Пример: 'clamped'
, [1 0]
e1
— Оставленное значение граничного условияОставленное значение граничного условия для сплайна, заданного как скалярное значение. e1
задает значение для i th производная в левом конце данных, где conds
обеспечивает i. Даже если вы используете различные граничные условия в двух концах, если вы предоставляете значение граничного условия в одном конце, необходимо также предоставить один для другого конца.
Обратите внимание на то, что некоторые предопределенные опции для conds
игнорируют любые значения граничного условия, которые вы обеспечиваете.
Значение по умолчанию для e1
является производной кубического interpolant в левых четыре сайта, когда conds(1) = 1
и является 0
в противном случае.
Типы данных: single | double
e2
— Правильное значение граничного условияПравильное значение граничного условия для сплайна, заданного как скалярное значение. e2
задает значение для i th производная в правильном конце данных, где conds
обеспечивает i. Даже если вы используете различные граничные условия в двух концах, если вы предоставляете значение граничного условия в одном конце, необходимо также предоставить один для другого конца.
Обратите внимание на то, что некоторые предопределенные опции для conds
игнорируют любые значения граничного условия, которые вы обеспечиваете.
Значение по умолчанию для e2
является производной кубического interpolant на правильных четырех сайтах, когда conds(2) = 1
и является 0
в противном случае.
Типы данных: single | double
pp
— Шлицуйте в ppformШлицуйте в ppform, возвращенной как структура с этими полями.
Form
— Форма сплайнаpp
Форма сплайна, возвращенного как pp
. pp
указывает, что сплайн дан в форме кусочного полинома.
Breaks
— Свяжите местоположения узлом сплайнаСвяжите положения узлом сплайна, возвращенного как вектор или как массив ячеек векторов для многомерных данных. Векторы содержат строго увеличивающиеся элементы, которые представляют запуск и конец каждого из интервалов, на которых заданы полиномиальные части.
Coefs
— Коэффициенты полиномовКоэффициенты полиномов для каждой части, возвращенной как матрица или как массив для многомерных данных.
Pieces
— Количество полиномиальных частейКоличество полиномиальных частей, описывающих сплайн, возвращенный как скаляр или как вектор количеств частей в каждой переменной для многомерных данных.
Order
— Порядок полиномовПорядок полиномиальной функции, описывающей каждую полиномиальную часть сплайна, возвращенного как скаляр или как вектор, содержащий порядок в каждой переменной для многомерных данных.
Dim
РазмерностьРазмерность целевой функции, возвращенной как скаляр.
Соответствующая трехдиагональная линейная система создается и решила использование возможностей разреженной матрицы MATLAB®.
Команда csape
обращается к очень расширенной версии стандартной программы Фортрана CUBSPL
в PGS.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.