资源描述
实验3 插值与数值积分
实验目的:
1.掌握用MATLAB 计算拉格朗日、分段线性、三次样条三种插值的方法,改变节点的数目,对三种插值结果进行初步分析;
2.掌握用MATLAB 及梯形公式、辛普森公式、高斯公式计算数值积分;
3.通过实例学习用插值和数值积分解决实际问题。
实验内容:
一、 实验预备
1、编制计算拉格朗日插值的M文件,如下:
function y=lagr(x0,y0,x)
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0;
for k=1:n
p=1;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
2、编制辛普森公式的.m文件,并命名为simp.m文件。如下:
function s=simp(x,y)
n=length(x);
s=0;
m=(n-1)/2;
for k=1:(m-1)
s=s+4*y(2*k+2)+2*y(2*k+1);
end
s=s+y(1)+y(n);
s=s*(x(2)-x(1))/3;
end
二、 实验题目
【问题1】表3.7 中给出的x,y 数据位于机翼剖面的轮廓线上,y1 和y2 分别对应轮廓的上下线。
假设需要得到x 坐标每改变0.1 时的y 坐标。试完成加工所需数据,画出曲线,求加工剖面的面积。
表3.7 机翼剖面轮廓线上的数据
X
0
3
5
7
9
11
12
13
14
15
y1
0
1.8
2.2
2.7
3.0
3.1
2.9
2.5
2.0
1.6
y2
0
1.2
1.7
2.0
2.1
2.0
1.8
1.2
1.0
1.6
【问题分析】本题中若要求得x 坐标每改变0.1 时的y 坐标,必须使用插值的方法来获得更多的数据。利用获得的数据画出曲线之后,可以再使用积分的方法求得加工剖面的面积。
【运算程序】
使用拉格朗日插值法、分段线性插值法、三次样条插值法求出所需数据:
>>x0=[0,3:2:11,12,13,14,15]; %将题中已给数据x设为x0
>>y1=[0 1.8 2.2 2.7 3.0 3.1 2.9 2.5 2.0 1.6];
>>y2=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];%按照表格输入原始数据
>>x=0:0.1:15;%以0.1的间隔取插值点
>>s1=lagr(x0,y1,x);
>>s2=lagr(x0,y2,x);%在x方向计算拉格朗日插值
>>i1=interp1(x0,y1,x);
>>i2=interp1(x0,y2,x); %在x方向计算分段线性插值
>>j1=spline(x0,y1,x);
>>j2=spline(x0,y2,x); %在x方向计算三次样条插值
>>subplot(1,3,1),plot(x,s1,'r',x,s2,'r') %拉格朗日上下轮廓线
>>subplot(1,3,2),plot(x,i1,'b',x,i2,'b') %分段线性上下轮廓线
>>subplot(1,3,3),plot(x,j1,'g',x,j2,'g') %三次样条上下轮廓线
>>a=[x',s1',i1',j1',s2',i2',j2']%输出数据
上图中:最左边是使用拉格朗日插值法,中间是使用分段线性插值法,最右边是使用三次样条插值法。
依据输出的数据及图形来,显然利用拉格朗日插值法得到的数据波动太大,不符合实际情况。所以现采用与实际情况拟合较好的三次样条插值法计算剖面面积。
>>S=trapz(x,j1)-trapz(x,j2) %用梯形公式求剖面面积
S =11.3444
>> S=simp(x,j1)-simp(x,j2) %用辛普森公式求剖面面积
S =11.3381
【结果分析】
观察三种插值方法得到的数据及图形,由于已知数据点太少,使得拉格朗日的误差较大,振荡也比较大;使用分段线性插值法,所得数据及图形比较接近实际情况,但是不光滑;使用三次线条插值法,所得数据及图形也比较接近实际情况,图形也比较光滑。
综上,应使用三次线条插值法获得所需数据及图形。
已知,梯形公式的代数精度为1,辛普森公式为3,用辛普森公式更能求得实际结果。此处依照两公式的计算结果分别为:11.3444和11.3381,二者近似相等,所以机翼剖面的面积约为11.34。
【问题2】为算出某欧洲国家的国土面积,对该国地图做出如下测量:以由西向东方向为x轴,由南到北方向为y轴,选择方便的原点,并将从最西边界点到最东边界点在x轴上的区间适当的划分为若干段,在每个分点的y方向测出南边界点和北边界点的y坐标y1和y2,得到表三(单位:mm)。
根据地图的比例尺我们知道18mm相当于40km,试由测量数据计算该国国土的近似面积,与它的精确值41288km2作比较。
地图边界点数据
【问题分析】借用上一题的思路,先利用插值法来获得足够多的数据点,然后再利用积分方法算出该国家的面积。
【程序运算】
>> x0=[7.0 10.5 13.0 17.5 34.0 40.5 44.5 48.0 56.0 61.0 68.5 76.5 80.5 91.0 96.0 101.0 104.0 106.5 111.5 118.0 123.5 136.5 142.0 146.0 150.0 157.0 158.0];
>> y1=[44 45 47 50 50 38 30 30 34 36 34 41 45 46 43 37 33 28 32 65 55 54 52 50 66 66 68];
>> y2=[44 59 70 72 93 100 110 110 110 117 118 116 118 118 121 124 121 121 121 122 116 83 81 82 86 85 68]; %输入题中所给数据
>> x=[7.0:158.0];
>> s1=lagr(x0,y1,x);
>> s2=lagr(x0,y2,x); %拉格朗日插值
>> i1=interp1(x0,y1,x);
>> i2=interp1(x0,y2,x); %分段线性插值
>> j1=spline(x0,y1,x);
>> j2=spline(x0,y2,x); %三次样条插值
>> subplot(1,3,1),plot(x,s1,'r',x,s2,'r') %拉格朗日插值画图
>> subplot(1,3,2),plot(x,i1,'b',x,i2,'b') %分段线性插值画图
>> subplot(1,3,3),plot(x,j1,'g',x,j2,'g') %三次样条插值画图
上图中:最左边的是依据拉格朗日插值法画出的图形,中间是依据分段线性插值法,最右边是依据三次线条插值法。
对照上图和实际图形,拉格朗日法的误差太大,不以其来计算面积。另外两种拟合较好,分别使用其所得数据计算面积。
>> S1=trapz(x,i2)-trapz(x,i1)
S1 = 8.5875e+003
>> S1=S1/(18*18)*40*40
S1 =4.2407e+004 %梯形公式计算分段线性插值所得数据
>> S2=trapz(x,j2)-trapz(x,j1)
S2 = 8.5977e+003
>> S2=S2/(18*18)*40*40
S2 =4.2458e+004 %梯形公式计算三次样条插值所得数据
>> S3=simp(x,i2)-simp(x,i1)
S3 =8.5654e+003
>> S3=S3/(18*18)*40*40
S3 =4.2298e+004 %辛普森公式计算分段线性插值所得数据
>> S4=simp(x,j2)-simp(x,j1)
S4 =8.5792e+003
>> S4=S3/(18*18)*40*40
S4 = 4.2366e+004 %辛普森公式计算三次样条插值所得数据
通过由以上四种方法计算出的面积与真实面积的比较,不难发现用辛普森公式与分段线性插值法所得数据误差较小。
>> S3 =4.2298e+004;
>> D=S3-41288
D =1010 %计算误差
【结果分析】由三种插值方法得出的图形以及最后由两种积分方法算出的结果可知,用辛普森公式计算积分、用分段线性插值所得面积误差最小,面积为42298km2,误差为1010km2,相对误差为2.4%。误差在可接受范围内,所采取的方法相对可靠。
【问题3】在桥梁的一端每隔一段时间记录1min有几辆车过桥,得到下表数据。
过桥车辆数据
试估计一天通过桥梁的车流量。
【问题分析】该问题依旧是考察插值方法和积分方法的运用。同样可用插值法先计算出每隔1min过桥的车辆数,再用积分的方法求得一天通过桥梁的车流量。
【程序运算】
>> x0=[0:120:240,300:60:540,630:60:750,840,960:60:1440];
>> y=[2 2 0 2 5 8 25 12 5 10 12 7 9 28 22 10 9 11 8 9 3]; %录入图表数据
>> x=[0:1440];
>> s=lagr(x0,y,x); %拉格朗日法求插值
>> i=interp1(x0,y,x); %分段线性法求插值
>> j=spline(x0,y,x); %三次样条法求插值
>> subplot(1,3,1),plot(x,s,'r') %拉格朗日法插值画图
>> subplot(1,3,2),plot(x,i,'b') %分段线性法插值画图
>> subplot(1,3,3),plot(x,j,'g') %三次样条法插值画图
上图中:最左边是拉格朗日插值法所画图形,中间是分段线性插值法,最右边是三次线条插值法。下面利用分段线性法与三次样条法所得插值计算车流量。
>> V1=trapz(x,i)
V1 = 12990 %梯形公式计算分段线性插值所得数据
>> V2=simp(x,i)
V2 = 1.2987e+004 %辛普森公式计算分段线性插值所得数据
>> V3=trapz(x,j)
V3 = 1.2668e+004 %梯形公式计算三次样条插值所得数据
>> V4=simp(x,j)
V4 = 1.2666e+004 %辛普森公式计算三次样条插值所得数据
【结果分析】
比较计算结果,分段线性插值法所得数据较大,且两种积分方法得到结果相近,近似认为车流量为12987辆/天;三次样条插值法所得数据较小,且两种积分方法得到结果相近,近似认为车流量为12666辆/天。
综上,可估计车流量为12600~13000辆/天。
实验总结
作为一个技术渣,第一次使用MATLAB做作业耗时较多,加上前期对MATLAB基本操作的掌握大概有7个小时。不过此次作业的收货还是非常多的,首先知道了MATLAB本身没有拉格朗日插值法的函数,需要自己编一个文件,然后这三道题从本质上来看是一道题,而且核心知识点也只有三种插值方法以及求面积的三种方法,经过这三道题的反复练习,现在已经掌握了。
整体上还是觉得MATLAB比编程更有趣,在工程上、实际应用中也有更大的用处,我相信我会把数学实验学好的!
展开阅读全文