1. 流程图
附录A 三次Hermite插值地C程序
开始 输入xi,yi,x y=0, j=0
2.C程序代码 #include
return((x-1)*(x-1)*(2*x+1))。 }
float f1(float x)
{
return(x*x*(-2*x+3))。 }
float g0(float x) {
return(x*(x-1)*(x-1))。 }
float g1(float x) {
return(x*x*(x-1))。 } void main()
{float x0,x1,x,y0,y1,yy0,yy1,h,p。
printf(\输入x0,x1,x,y0,y1和yy0,yy1地取值\。
scanf(\。 h=x1-x0。
p=y0*f0((x-x0)/h)+y1*f1((x-x0)/h)+h*yy0*g0((x-x0)/h)+h*yy1*g1((x-
x0)/h)。 printf(\。 }
3.运行结果截图
图1 三次Hermite插值地C程序结果截图
1 MATLAB程序代码
function [f,f0] = Hermite1(x,y,y_1) syms t; f = 0.0;
if(length(x) == length(y)) if(length(y) == length(y_1))
附录B 二重Hermite插值地MATLAB程序
n = length(x); else
disp('y和y地导数地维数不相等'); return; end else
disp('x和y地维数不相等! '); Return; end for i=1 n h = 1.0。 a = 0.0。 for j=1 n if( j ~= i)
h = h*(t-x(j))^2/((x(i)-x(j))^2)。 a = a + 1/(x(i)-x(j))。 end end
f = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i))。 end
f0 = subs(f,'t')。
程序输入值: x=1 0.2 1.8。
y_1=[0.5 0.4564 0.4226 0.3953 0.3727]。 y=[1 1.0954 1.1832 1.2649 1.3416]。 >> [f,f0] = Hermite1(x,y,y_1); 可得如下运行结果: 运行结果如下: f =
(390625*((337232823972231*t)/35184372088832-114418258618928321/10995116277760000)*(t
-
1)^2*(t - 7/5)^2*(t - 8/5)^2*(t - 9/5)^2)/36 - (390625*(t - 1)^2*(t-6/5)^2*(t-7/5)^2*(t - 9/5)^2*((2855713758717179*t)/281474976710656 - 384779664999124623/21990232555520000))/36 +
(390625*((64*t)/3
-
61/3)*(t
-6/5)^2*(t-7/5)^2*(t-8/5)^2*(t-+
-6/5)^2*(t-8/5)^2*(t-9/5)^2)/16--
9/5)^2)/576+(390625*((7612884810106783*t)/18014398509481984 6660373488918492043/11258999068426240000)*(t (390625*((7762319875242775*t)/281474976710656
8968626627620006931/175921860444160000)*(t - 1)^2*(t - 6/5)^2*(t - 7/5)^2*(t - 8/5)^2)/576 -
1)^2*(t
2.程序演示图
图2 二次Hermite插值地MATLAB图形演示