当前位置:文档之家› 计算方法-插值方法实验

计算方法-插值方法实验

实验一插值方法
一. 实验目的
(1)熟悉数值插值方法的基本思想,解决某些实际插值问题,加深对数值插值方法
的理解。

(2)熟悉Matlab 编程环境,利用Matlab 实现具体的插值算法,并进行可视化显示。

二. 实验要求
用Matlab 软件实现Lagrange 插值、分段线性插值、三次Hermite 插值、Aitken 逐步插值算法,并用实例在计算机上计算和作图。

三. 实验内容
1. 实验题目 (1


知概
率积
分dx
e y x
x ⎰-=
2
2
π
的数据表
构造适合该数据表的一次、二次和三次Lagrange 插值公式,输出公式及其图形,并计算x =0.472时的积分值。

答:
①一次插值公式:
输入下面内容就可以得到一次插值结果 >> X=[0.47,0.48];Y=[0.4937452,0.5027498]; >> x=0.472;
>> (x-X(2))/(X(1)-X(2))*Y(1)+(x-X(1))/(X(2)-X(1))*Y(2)
ans =0.495546120000000
>>
②两次插值公式为:
输入下面内容就可以得到两次插值结果
>> X=[0.46,0.47,0.48];Y=[0.4846555,0.4937452,0.5027498]; >> x=0.472;
>>(x-X(2))*(x-X(3))/((X(1)-X(2))*(X(1)-X(3)))*Y(1)+(x-X(1))*(x-X(3))/((X(2)-X(1))*(X(2)-X(3)))*Y(2)+(x-X(2))*(x-X(1))/((X(3)-X(2))*(X(3)-X(1)))*Y(3)
i 0
1
2
3
x 0.46 047 0.48 0.49 y
0.4846555 0.4937452 0.5027498 0.5116683
ans =0.495552928000000
>>
③三次插值公式为:
输入下面内容就可以得到三次插值结果
>> X=[0.46,0.47,0.48,0.49];Y=[0.4846555,0.4937452,0.5027498,0.5116683];
>> x=0.472;
>>
(x-X(2))*(x-X(3))*(x-X(4))/((X(1)-X(4))*(X(1)-X(2))*(X(1)-X(3)))*Y(1)+(x-X(4))*( x-X(1))*(x-X(3))/((X(2)-X(4))*(X(2)-X(1))*(X(2)-X(3)))*Y(2)+(x-X(4))*(x-X(2))*( x-X(1))/((X(3)-X(4))*(X(3)-X(2))*(X(3)-X(1)))*Y(3)+(x-X(3))*(x-X(2))*(x-X(1))/(( X(4)-X(1))*(X(4)-X(2))*(X(4)-X(3)))*Y(4)
ans =0.495552960000000
输入下面内容,绘出三点插值的图:
>> X=[0.46,0.47,0.48,0.49];Y=[0.4846555,0.4937452,0.5027498,0.5116683];
>> x=linspace(0.46,0.49);
>>
y=(x-X(2)).*(x-X(3)).*(x-X(4))/((X(1)-X(4))*(X(1)-X(2))*(X(1)-X(3)))*Y(1)+(x-X(4) ).*(x-X(1)).*(x-X(3))/((X(2)-X(4))*(X(2)-X(1))*(X(2)-X(3)))*Y(2)+(x-X(4)).*(x-X(2) ).*(x-X(1))/((X(3)-X(4))*(X(3)-X(2))*(X(3)-X(1)))*Y(3)+(x-X(3)).*(x-X(2)).*(x-X(1) )/((X(4)-X(1))*(X(4)-X(2))*(X(4)-X(3)))*Y(4);
>>plot(x,y)
(注意上面的“.*”不能用“*”替代);
(2)将区间[-5,5]分为10等份,求作2
11
)(x x f +=的分段线性插值函数,输出函数表达式及其图形,并计算x =3.3152时的函数值。

答:
编写下面的文件,命名为sectionFun.m,内容如下: function y0=sectionFun(x0) X=zeros(11,1); Y=zeros(11,1);
%X 、Y 矩阵分别存储函数11个插值点的x 和y 值
X(1)=-5;
Y(1)=1/(1+X(1)*X(1)); for i=2:11
X(i)=X(i-1)+1; Y(i)=1/(1+X(i)*X(i));
end
%绘出各分段图形 hold on for i=1:10
x=linspace(X(i),X(i+1),100);
y=(x-X(i+1))/(X(i)-X(i+1))*Y(i)+(x-X(i))/(X(i+1)-X(i))*Y(i+1); plot(x,y);
end hold off %计算x0的函数值 for i=1:10
if x0>=X(i) & x0<=X(i+1) k=i;break ; end
end
y0=(x0-X(k+1))/(X(k)-X(k+1))*Y(k)+(x0-X(k))/(X(k+1)-X(k))*Y(k+1); end
输入>> y0=sectionFun(3.3152) 便得出结果和图形:
y0 = 0.087021176470588
(3)仿照附录C中“文件1.2 逐步插值”程序(Neville算法,课本227页)编写相应的Aitken逐步插值算法的程序,根据下表所给数据分别利用上述两种算法求正弦积分
⎰∞-= x
dt t
t
x f sin
)
(在x=0.462的值,并比较它们的结果。

x 0.3 0.4 0.5 0.6 0.7
y 0.29850 0.39646 0.49311 0.58813 0.68122 方法一:采用书本的Neville算法
新建文件Neville.m文件,内容如下所示:
②Aitken逐步插值算法:
编写下面的的Aitken_eval.m文件
③进行计算和验证
先进行验证,其中Lagange_eval函数即为拉格朗日公式(同书本写的程序一样)直接计算出来的值,以本实验中第一个题目中数据为例,结果如下所示:
可见,自己编写的程序是正确的
对本题中的数据进行计算如下所示:
计算结果和拉格朗日公式计算出来的一样,充分利用了5个点数据,是具有比较高的精确度的
(4)运行C中“文件1.3 分段三次Hermite插值”程序(课本228页),要求自行选择实验数据
运行如下所示:
与书本对照,运行正确,
2. 设计思想
要求针对上述题目,详细分析每种算法的设计思想。

答:第一小问是直接根据公式来求;后面再设计上都是遵循一个思想,化复杂为简单的重复,从结构清晰简单,而让计算机去进行繁琐的运算;
四.实验体会
对实验过程进行分析总结,指出每种算法的设计要点及应注意的事项,以及自己通过实验所获得的对插值方法的理解。

答:
⑴通过实验初步了解了matlab的使用,学会了一些基本规律;像怎么写.m文件,函数的命名和参数的引入等等;作图一般使用plot函数,或plotyy函数等,同时输出多个函数的图像,还可以使用hold on命令;再者“.*”和“*”是用区别的,在适当的场合应用不同的形式;
⑵初步领略了编写程序的方法,把复杂化为简单的重复,问题既要化为简单,这种简单也要具有一定的规律,能用一定的循环语句来表达,以便让计算机能自动重复地进行下去,同时让程序变得简单,可读性更强。

相关主题