Интерполяция кубическим сплайном
pp=csapi(x,y)
values = csapi(x,y,xx)
pp=csapi(x,y)
возвращает ppform кубического сплайна s с последовательностью узла x
, который принимает значение y(:,j)
в x(j)
для j=1:length(x)
. Значения y(:,j)
могут быть скалярами, векторами, матрицами, даже массивы ND. Точки данных с тем же сайтом данных усреднены и затем отсортированы по их сайтам. С x
получившиеся отсортированные сайты данных сплайн s
удовлетворяет граничные условия не-узла, а именно, jump
x (2) D 3s = 0 = jump
x (закончите 1), D 3s (с D 3s третья производная s).
If x
является массивом ячеек, содержа последовательности x1
..., xm
, длин n1
..., nm
соответственно, затем y
, как ожидают, будет массивом размера [n1,...,nm]
(или размера [d,n1,...,nm]
, если interpolant должен быть d
- оцененный). В этом случае pp
является ppform m
- кубический сплайн interpolant s к таким данным. В частности, теперь s (x l (i 1)..., x m (i m)) равняется y (: i 1..., i m) для i 1 = 1:nl..., i m = 1:nm.
Можно использовать стр структуры, в fnval
, fnder
, fnplt
, и т.д., чтобы оценить, дифференцировать, построить, и т.д., этот интерполирующий кубический сплайн.
values = csapi(x,y,xx)
совпадает с fnval(csapi(x,y),xx)
, т.е. значения интерполирующего кубического сплайна на сайтах, заданных xx
, возвращены.
Эта команда является по существу функцией MATLAB® spline
, который, в свою очередь, является упрощенной версией стандартной программы Фортрана CUBSPL
в PGS, за исключением того, что csapi
(и теперь также spline
) принимает данные с векторным знаком и может обработать данные с координатной сеткой.
Смотрите пример “Интерполяция Сплайна” для различных примеров.
До погрешностей округления и принятие, что x
является вектором по крайней мере с четырьмя записями, оператор pp = csapi(x,y)
должен поместить тот же сплайн в pp
, как делает оператор
pp = fn2fm(spapi(augknt(x([1 3:(end-2) end]),4),x,y),'pp');
за исключением того, что описание сплайна получило этот второй путь, не будет использовать пропуска в x(2)
и x(n-1)
.
Вот простой двумерный пример, сплайн bicubic interpolant к мексиканской построенной функции Шляпы:
x =.0001+[-4:.2:4]; y = -3:.2:3; [yy,xx] = meshgrid(y,x); r = pi*sqrt(xx.^2+yy.^2); z = sin(r)./r; bcs = csapi( {x,y}, z ); fnplt( bcs ), axis([-5 5 -5 5 -.5 1])
Отметьте реверсирование x
и y
в вызове meshgrid
, необходимого, потому что MATLAB нравится думать о записи z(i,j)
как значение в (x(j)
, y(i)
), в то время как этот тулбокс следует стандарту Теории Приближения размышления о z(i,j)
как значение в (x(i)
, y(j)
). Подобная осторожность должна быть проявлена, когда значения такого двумерного сплайна должны быть построены при помощи функции mesh
MATLAB, как показан здесь (отметьте использование транспонирования матрицы значений, полученных из fnval
).
xf = linspace(x(1),x(end),41); yf = linspace(y(1),y(end),41); mesh(xf, yf, fnval( bcs, {xf, yf}).')
Соответствующая трехдиагональная линейная система создана и решена, с помощью возможности разреженной матрицы MATLAB.
Граничное условие не-узла используется, таким образом обеспечивая первую и вторую полиномиальную часть interpolant, чтобы совпасть, а также предпоследнее и последняя полиномиальная часть.