📄 splint1.m
字号:
function p = splint1(x,f,df)
% Compute coefficients for interpolating cubic spline
% Call p = splint1(x,f) % Natural spline
% or p = splint1(x,f,df) % Correct boundary conds.
% Input
% x: Vector with knots. Length n+1.
% f: Vector with nodal function values. Length n+1.
% df: If present, then a vector with endpoint derivatives,
% df(1) = f'(x(1)), df(2) = f'(x(n+1))
% Output
% p : n*4 array with p(i,:) = [ai bi ci di].
% Version 3.06.2004. INCBOX
n = length(x) - 1; % number of knot intervals
h = diff(x); % n-vector with knot spacings
v = diff(f)./h; % n-vector with divided differences
% Set up matrix A and right hand side r
A = zeros(n+1,n+1); r = zeros(n+1,1);
for i = 1 : n-1
A(i+1,i:i+2) = [h(i+1) 2*(h(i)+h(i+1)) h(i)];
r(i+1) = 3*(h(i+1)*v(i) + h(i)*v(i+1));
end
if nargin == 3 % Correct boundary conds.
A(1,1) = 1; r(1) = df(1);
A(n+1,n+1) = 1; r(n+1) = df(2);
else % Natural spline.
A(1,1:2) = [2 1]; r(1) = 3*v(1);
A(n+1,n:n+1) = [1 2]; r(n+1) = 3*v(n);
end
ds = A\r; % Solve A*ds = r
% Compute coefficients
p = zeros(n,4);
for i = 1:n
p(i,1) = f(i);
p(i,2) = h(i)*ds(i);
p(i,3) = 3*(f(i+1) - f(i)) - h(i)*(2*ds(i) + ds(i+1));
p(i,4) = 2*(f(i) - f(i+1)) + h(i)*(ds(i) + ds(i+1));
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -