hermite.m

来自「一个自己写的关于Hermite的matlab程序」· M 代码 · 共 37 行

M
37
字号
function yi=Hermite(x,y,ydot,xi)
%Hermite 插值公式,其中,
%x为向量,全部的插值节点;
%y为向量,插值节点处的函数值;
%ydot为向量,插值节点处的导数值,
%如果此处值缺省,则用均差代替导数,
%端点用向前、向后均差,中间点用中心均差;
%xi为标量,自变量x;
%yi为xi处的函数估计值。
%如果没有给出y的导数值,则用均差代替导数
if isempty(ydot)==1
    ydot=gradient(y,x);
end
n=length(x); m1=length(y); m2=length(ydot);
%输入x,y和y的导数的个数必须相同
 if n~=m1|n~=m2|m1~=m2
     error('The lengths of X,Y and Ydot must be equal!');
     return;
 end
 p=zeros(1,n);q=zeros(1,n); yi=0;
 for k=1:n
     t=ones(1,n);z=zeros(1,n);
     for j=1:n
         if j~=k
             %插值节点必须互异
             if abs(x(k)-x(j))<eps
                 error('the DATA is error!');
                 return;
             end
             t(j)=(xi-x(j))/(x(k)-x(j));
             z(j)=1/(x(k)-x(j));
         end
     end
     p(k)=prod(t);q(k)=sum(z);
     yi = yi + y(k) *(1-2*(xi-x(k))*q(k))*(p(k)^2)...
         +ydot(k)*(xi-x(k))*(p(k)^2);
 end

⌨️ 快捷键说明

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