function [df,d2f]=diffspline(x,y,dy,x0) % 利用三次样条求非节点上的一阶和二阶数值导数,函数解析式未知 % 输入的x必须是一个等距序列,y和dy是x上的函数值和导数值 % x0是要求导数近似值的非节点的点 % 输出的df和d2f分别是x0上的一阶和二阶数值导数 % NUMERICAL METHODS: Matlab Programs % (c) 2007 by Xie Liling % Complementary Software to accompany the textbook: % Information and Computing Science: A Laboratory Course h=x(2)-x(1); n=length(x); df=zeros(1,n); s=find((x-x0)<=0) k=s(end); df=(2/h^3)*((x0-x(k+1))*(3*x0-2*x(k)-x(k+1)+h)*y(k)-(x0-x(k))*(3*x0-x(k)-2*x(k+1)-h)*y(k+1))+... (1/h^2)*((x0-x(k+1))*(3*x0-2*x(k)-x(k+1))*dy(k)+(x0-x(k))*(3*x0-2*x(k+1)-x(k))*dy(k+1)); d2f=(1/h^2)*((6*x0-2*x(k)-4*x(k+1))*dy(k)+(6*x0-4*x(k)-2*x(k+1))*dy(k+1))+... (6/h^3)*(x(k)+x(k+1)-2*x0)*(dy(k+1)-dy(k));