Кубическая сплайн интерполяция с граничными условиями
возвращает кубическую сплайн интерполяцию к заданным данным pp = csape(x,y)(x,y) в форме pform. Функция применяет граничные условия Лагранжа к каждому концу данных и соответствует концам сплайна наклону кубического полинома, который соответствует последним четырем точкам данных на каждом конце. Значения данных на том же сайте усредняются.
возвращает кубическую сплайн интерполяцию для данных с сеткой с помощью одномерных входов 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

Стационарная точка около первой точки данных показывает, что граничные условия реализованы в подгонке.
Использование csape для соответствия многомерным векторным данным. Этот пример подходит для данных с векторными значениями, используя различные граничные условия для каждой независимой переменной.
Во-первых, определите данные. В данном примере задайте трехмерные векторы 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) задайте значения конечного уклона.
В некоторых случаях необходимо поставить граничным условиям граничных условий. В этом двухмерном примере вы воспроизводите бикубический полином 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' )
endx - Сайты данныхСайты данных значений данных 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.
Доступны следующие предопределенные граничные условия.
| Сопоставьте торцы с заданными значениями |
Сделать второй и второй сайты неактивными. Эта опция игнорирует все значения, которые вы обеспечиваете | |
| Сопоставьте первую и вторую производные в левом конце с производными в правом конце. |
| Сопоставьте конечные вторые производные с заданными значениями |
| Установите конечные вторые производные равными нулю. Эта опция игнорирует все значения, которые вы обеспечиваете |
Чтобы задать различные граничные условия на каждом конце, поставляйте conds как матрица 1 на 2. Элементы этих элементов матрицы задают порядок производной сплайна, фиксированной граничными условиями. Настройка conds(j) = i фиксирует i-ю производную Dis - значение граничного условия.
Значение граничного условия по умолчанию является производной кубической интерполяции в левых четырех сайтах при conds(1) = 1 и является 0 в противном случае. Установите значения граничных условий для левой и правой сторон данных путем определения e1 и e2, соответственно.
Можно задать значение conds(j) как 0, 1, или 2. Если вы задаете другое значение или не задаете conds(j), затем conds(j) является 1 и соответствующее значение граничного условия является значением по умолчанию.
Доступны следующие предопределенные граничные условия.
зажатый | Ds (<reservedrangesplaceholder1>) |
|
кривой | D2s (<reservedrangesplaceholder1>) |
|
периодический | Drs (a) = Drs (b), r = 1,2 |
|
вариационный | D2s (<reservedrangesplaceholder0>) = 0 |
|
e, a и b относятся к левому или правому местоположению данных; ej является e1 для левого конца данных и e2 для правого конца данных.
Можно задать необязательные значения граничных условий e1 и e2 используете ли вы предопределенные или пользовательские опции для conds. Однако обратите внимание, что некоторые предопределенные опции для conds игнорируйте все заданные значения граничных условий.
Пример: 'clamped', [1 0]
e1 - Значение условия левого концаЛевое граничное условие значение сплайна, заданное как скалярное значение. e1 задает значение для i-й производной в левом конце данных, где conds обеспечивает i. Даже при использовании различных граничных условий на двух концах, если вы поставляете значение граничного условия на одном конце, вы также должны поставить один для другого конца.
Обратите внимание, что некоторые предопределенные опции для conds игнорируйте все заданные значения граничных условий.
Значение по умолчанию для e1 является производной кубической интерполяции в левых четырех сайтах, когда conds(1) = 1 и является 0 в противном случае.
Типы данных: single | double
e2 - Значение условия правого концаПравое граничное условие значение сплайна, заданное как скалярное значение. e2 задает значение для i-й производной в правом конце данных, где conds обеспечивает i. Даже при использовании различных граничных условий на двух концах, если вы поставляете значение граничного условия на одном конце, вы также должны поставить один для другого конца.
Обратите внимание, что некоторые предопределенные опции для conds игнорируйте все заданные значения граничных условий.
Значение по умолчанию для e2 является производной кубической интерполяции в правом четырех сайтах, когда conds(2) = 1 и является 0 в противном случае.
Типы данных: single | double
pp - Сплайн в ppformСплайн в ppform, возвращается как структура с этими полями.
Form - Форма сплайнаppФорма сплайна, возвращенная как pp. pp указывает, что сплайн задан в кусочный полином форме.
Breaks - Расположение узлов сплайнаУзловые положения сплайна, возвращенные как вектор или как массив ячеек векторов для многомерных данных. Векторы содержат строго увеличивающиеся элементы, которые представляют начало и конец каждого из интервалов, над которыми заданы полиномиальные части.
Coefs - Коэффициенты полиномовКоэффициенты полиномов для каждой части, возвращенные как матрица или как массив для многомерных данных.
Pieces - Количество полиномиальных частейКоличество полиномиальных частей, описывающих сплайн, возвращаемое в виде скаляра или в виде вектора из числа частей в каждой переменной для многомерных данных.
Order - Порядок полиномовПорядок полиномиальной функции, описывающей каждую полиномиальную часть сплайна, возвращаемый как скаляр или как вектор, содержащий порядок в каждой переменной для многомерных данных.
Dim - РазмерностьРазмерность целевой функции, возвращенной как скаляр.
Соответствующая тридиагональная линейная система построена и решена с помощью разреженных матричных возможностей MATLAB®.
The csape команда вызывает намного расширенную версию стандартной программы Фортран CUBSPL в PGS.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.