资源描述:
《数值分析方法(讲义)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第十章数值分析方法在生产实际中,常常要处理由实验或测量所得到的一批离散数据,数值分析中的插值与拟合方法就是要通过这些数据去确定某一类已经函数的参数,或寻求某个近似函数使之与已知数据有较高的拟合精度。插值与拟合的方法很多,这里主要介绍线性插值方法、多项式插值方法和样条插值方法,以及最小二乘拟合方法在实际问题中的应用。相应的理论和算法是数值分析的内容,这里不作详细介绍。§1数据插值方法及应用在生产实践和科学研究中,常常有这样的问题:由实验或测量得到变量间的一批离散样点,要求由此建立变量之间的函数关系或得到样点之外的数据。与此有关的
2、一类问题是当原始数据精度较高,要求确定一个初等函数(一般用多项式或分段多项式函数)通过已知各数据点(节点),即,或要求得函数在另外一些点(插值点)处的数值,这便是插值问题。1、分段线性插值这是最通俗的一种方法,直观上就是将各数据点用折线连接起来。如果那么分段线性插值公式为可以证明,当分点足够细时,分段线性插值是收敛的。其缺点是不能形成一条光滑曲线。例1、已知欧洲一个国家的地图,为了算出它的国土面积,对地图作了如下测量:以由西向东方向为x轴,由南向北方向为y轴,选择方便的原点,并将从最西边界点到最东边界点在x轴上的区间适当的分为
3、若干段,在每个分点的y方向测出南边界点和北边界点的y坐标y1和y2,这样就得到下表的数据(单位:mm)。x7.010.513.017.534.040.544.548.056.0y1444547505038303034y24459707293100110110110x61.068.576.580.591.096.0101.0104.0106.5y1363441454643373328y2117118116118118121124121121x111.5118.0123.5136.5142.0146.0150.0157.0158.
4、0y1326555545250666668y2121122116838182868568根据地图的比例,18mm相当于40km。根据测量数据,利用MATLAB软件对上下边界进行线性多项式插值,分别求出上边界函数,下边界函数,利用求平面图形面积的数值积分方法—将该面积近似分成若干个小长方形,分别求出这些长方形的面积后相加即为该面积的近似解。式中,。这里线性插值和面积计算源程序如下:clearallx=[7.010.513.017.534.040.544.548.056.061.068.576.580.591.096.0101.0
5、104.0106.5111.5118.0123.5136.5142.0146.0150.0157.0158.0];y1=[444547505038303034363441454643373328326555545250666668];y2=[4459707293100110110110117118116118118121124121121121122116838182868568];newx=7:0.1:158;newy1=interp1(x,y1,newx,’linear’);newy2=interp1(x,y2,newx,
6、’linear’);Area=sum(newy2-newy1)*0.1/18^2*1600最后计算的面积约为42414平方公里。2、多项式插值设有次多项式通过所有个点,那么就有可以证明当且时,这样的多项式存在且唯一。若要求得到函数表达式,可直接解上面方程组。若只要求得函数在插值点处数值,可用下列Lagrange插值公式多项式插值光滑但不具有收敛性,一般不宜采用高次多项式(如)插值。例2、在万能拉拨机中有一个园柱形凸轮,其底园半径R=300mm,凸轮的上端面不在同一平面上,而要根据动杆位移变化的需要进行设计制造。按设计要求,将底
7、园周18等分,旋转一周。第个分点对应柱高,数据见下表。为了数控加工,需要计算出园周上任一点的柱高。凸轮高度的数据(单位:mm)分点0和1812345柱高502.8525.0514.3451.0326.5188.6分点67891011柱高92.259.662.2102.7147.1191.6分点121314151617柱高236.0280.5324.9369.4413.8458.3我们将园周展开,借助MATLAB软件画出对应的柱高曲线散点图(左下图)。clear;close;x=linspace(0,2*pi*300,19);y
8、=[502.8,525.0,514.3,451.0,326.5,188.6,92.2,59.6,62.2,102.7,147.1,191.6,236.0,280.5,324.9,369.4,413.8,458.3,502.8];plot(x,y,’o’);axis([0,20