资源描述
插值法与MATLAB应用
2007-11-02 10:35
实验2 插值法与MATLAB应用
一、实验名称:插值法与MATLAB应用。
二、实验目的:理解插值的基本原理,掌握常用算法的设计,掌握用MATLAB实现插值。
三、实验题目:已知数据如下:
0.2 0.4 0.6 0.8 1.0
0.9798652 0.9177710 0.8080348 0.6386093 0.3843735
四、实验要求:
1、设计全区间上拉格朗日插值程序或者Newton插值程序。利用MATLAB在第一个图中画出离散数据及插值函数曲线。
2、利用MATLAB画出分段线性插值函数,并与(1)作对比说明。
3、对于自然边界条件 ,利用MATLAB在第二个图中画出离散数据,再画出通过表中型值点并满足边界条件的三次样条插值函数。
4、对于第一种边界条件 ,利用MATLAB在第三个图中画出离散数据,再画出通过表中型值点并满足边界条件的三次样条插值函数。
5、例举一个闭区间上的连续函数,用画图或列表的方式观察与体会Runge现象,分别用下面方法对比说明:1)10次Lagrange;2)分段低次插值;3)分段三次样条插值。
6、通过这个实验,谈谈你对插值方法有何理解、三次样条插值有何特点?
五、实验内容:
1、设计全区间上拉格朗日插值程序或者Newton插值程序。利用MATLAB在第一个图中画出离散数据及插值函数曲线。编写拉格朗日插值多项式函数内容为:
function f=lagfun(x)
a=[0.2,0.4,0.6,0.8,1.0];b=[0.9798652,0.9177770,0.8080348,0.6386093,0.3843735];
for i=1:5
L(i)=1;
for j=1:5
if j~=i
L(i)=L(i)*(x-a(j))/(a(i)-a(j));
end
end
end
f=0;
for i=1:5
f=f+L(i)*b(i);
end
画图 程序内容为:
fplot('lagfun',[0,1]);hold on
a=[0.2,0.4,0.6,0.8,1.0];b=[0.9798652,0.9177770,0.8080348,0.6386093,0.3843735];plot(a,b,'o')
图形为:
2、利用MATLAB画出分段线性插值函数,并与(1)作对比说明。
序内容为:a=[0.2,0.4,0.6,0.8,1.0];b=[0.9798652,0.9177770,0.8080348,0.6386093,0.3843735];
xx=0.2:0.01:1.0;
yy=interp1(a,b,xx,'linear');
plot(a,b,'r*',xx,yy);title('插值法');
图像为:
3、对于自然边界条件 ,利用MATLAB在第二个图中画出离散数据,再画出通过表中型值点并满足边界条件的三次样条插值函数。
程序内容为:
>> a=[0.2,0.4,0.6,0.8,1.0];b=[0.9798652,0.9177770,0.8080348,0.6386093,0.3843735];
>> pp=csape(a,b,'variational');
>> x=0.2:0.01:1;
>> y=ppval(pp,x);
>> plot(a,b,'o',x,y)
>>
图形为:
4、对于第一种边界条件 ,利用MATLAB在第三个图中画出离散数据,再画出通过表中型值点并满足边界条件的三次样条插值函数。
程序内容为:
a=[0.2,0.4,0.6,0.8,1.0];b=[0.9798652,0.9177770,0.8080348,0.6386093,0.3843735];
pp=csape(a,b,'second',[0.20271,1.55741]);
x=0.2:0.01:1;
y=ppval(pp,x);
plot(a,b,'o',x,y)
图形为:
5、例举一个闭区间上的连续函数,用画图或列表的方式观察与体会Runge现象,分别用下面方法对比说明:1)10次Lagrange;2)分段低次插值;3)分段三次样条插值。
举例的函数为:y=1/(1+x^2);编写拉格朗日函数:
function f=lagfun2(x)
a=linspace(-5,5,10);b=1./(1+a.^2);
for i=1:10
L(i)=1;
for j=1:10
if j~=i
L(i)=L(i)*(x-a(j))/(a(i)-a(j));
end
end
end
f=0;
for i=1:10
f=f+L(i)*b(i);
end
画出“原函数”,“拉格朗日”,“三次样条”三种函数,程序内容为:
a=linspace(-5,5,10);b=1./(1+a.^2);a=linspace(-5,5,10);b=1./(1+a.^2);xx=-5:.01:5;yy=interp1(a,b,xx,'spline');
fplot('1/(1+x^2)',[-5,5]);hold on;fplot('lagfun2',[-5,5]);hold on
gtext('原函数');gtext('朗格朗日插值');gtext('样条插值');
图像内容为:
6.拉格朗日插值在高次插值时同原函数偏差大,而三次样条插值相对好些
展开阅读全文