⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawspline.m

📁 Incorporating Prior Knowledge in Cubic Spline Approximation - Application to the Identification of R
💻 M
字号:
function [yv,dyv] = drawspline(sp,xv,s)
% DRAWSPLINE Cubic spline interpolation function
%
% [yv,dyv] = drawspline(sp,xv)  or
% [yv,dyv] = drawspline(sp,xv,s)
%
%   sp: spline
%   xv: vector of points where funtcion will interpolate yv and dyv
%   s:  character string for PLOT function
%          (if you don't use it, function won't draw)
%   yv: spline values
%   dyv: spline derivatives
%
% example:
%       hold on
%       drawspline(sp,[0:0.1:10],'b-');

yv = zeros(size(xv));
dyv = yv;
n = length(sp.x);
m = length(xv);
i = 1;
j = 1;
while (j<=m),
  while (i<n-1) & (xv(j)>=sp.x(i+1)),
    i = i+1;
  end
  if (xv(j)<sp.x(i)) | (xv(j)>sp.x(i+1)),
    warning('Out of intervals (xv)');
    yv(j)=0;
    i = 1;
  else
    k1 = sp.x(i); k2 = sp.x(i+1);
    xx = xv(j); h = k2-k1;
    a = (k2-xx)^2*(xx-k1)/h^2;  
    b = -(xx-k1)^2*(k2-xx)/h^2;
    c = (k2-xx)^2*(2*(xx-k1)+h)/h^3;
    d = (xx-k1)^2*(2*(k2-xx)+h)/h^3;
    da = (-2*(k2-xx)*(xx-k1)+(k2-xx)^2)/h^2;
    db = -(2*(xx-k1)*(k2-xx)-(xx-k1)^2)/h^2;
    dc = (-2*(k2-xx)*(2*(xx-k1)+h)+(2*(k2-xx)^2))/h^3;
    dd = (2*(xx-k1)*(2*(k2-xx)+h)-(2*(xx-k1)^2))/h^3;
    yv(j) = c*sp.y(i) + a*sp.dy(i) + d*sp.y(i+1) + b*sp.dy(i+1);
    dyv(j) = dc*sp.y(i) + da*sp.dy(i) + dd*sp.y(i+1) + db*sp.dy(i+1);
  end
  j = j+1;
end

% Drawing
if (nargin==3),
  plot(xv,yv,s);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -