Интерполяция кубическим сплайном с граничными условиями
возвращает интерполяцию кубическим сплайном в определенные данные 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
). Конкатенация этих значений граничного условия в соответствующих концах 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)
как векторное значение в координатном 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
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'
второй
, '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) = |
|
кривой | D2s (e) = |
|
периодический | Drs (a) = Drs (b), r = 1,2 |
|
вариационный | D2s (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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.