hermite.m

来自「利用牛顿、拉格朗日、三次样条及线性插值方法拟合数据」· M 代码 · 共 46 行

M
46
字号
function H =Hermite(x)
X=0:10;
X=-5+X;
y=0:10;H=0;
M=0:10;
a=0:10;
b=0:10;
syms m
r=1/(1+m^2);
g=diff(r);
for i=1:11
    y(i)=subs(r,'m',X(i));
    M(i)=subs(g,'m',X(i));
end
if x>=X(1)&&x<=X(2)
    a(1)=(1+2*(x-X(1))/(X(2)-X(1)))*(((x-X(2))/(X(1)-X(2)))^2);
    b(1)=(x-X(1))*(((x-X(2))/(X(1)-X(2)))^2);
else
    a(1)=0;
    b(1)=0;
end
for i=2:10
    if x>=X(i-1)&&x<=X(i)
       a(i)=(1+2*(x-X(i))/(X(i-1)-X(i)))*(((x-X(i-1))/(X(i)-X(i-1)))^2);
       b(i)=(x-X(i))*(((x-X(i-1))/(X(i)-X(i-1)))^2);
    elseif x>=X(i)&&x<=X(i+1)
       a(i)=(1+2*(x-X(i))/(X(i+1)-X(i)))*(((x-X(i+1))/(X(i)-X(i+1)))^2);
       b(i)=(x-X(i))*(((x-X(i+1))/(X(i)-X(i+1)))^2);
    else
        a(i)=0;
        b(i)=0;
    end
end
if x>=X(10)&&x<=X(11)
   a(11)=(1+2*(x-X(11))/(X(10)-X(11)))*(((x-X(10))/(X(11)-X(10)))^2);
   b(11)=(x-X(11))*(((x-X(10))/(X(11)-X(10)))^2);
else
   a(11)=0;
   b(11)=0;
end
for i=1:11
H=H+(M(i)*b(i)+y(i)*a(i));
end


⌨️ 快捷键说明

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