点的个数。考虑实验2.1中的函数或选择其他你有兴趣的函数。
实验要求:
(1)随节点个数增加,比较被逼近函数和样条插值函数误差的变化情况。分析所得结果并与拉格朗日多项式插值比较(可以用MATLAB的函数“spline”作此函数的三次样条插值,取n=10、20,分别画出插值函数及原函数的图形)。
(2)样条插值的思想是早产生于工业部门。作为工业应用的例子考虑如下问题:某汽车制造商用三次样条插值设计车门的曲线,其中一段的数据如下: xk yk yk’
要求:i.自己编程计算(用三弯矩、三转角方程均可) ii.主函数myspline(x,y,边界类型,边界值,xi ) 其中:x 节点 y 节点上的函数值 xi 未知节点 返回:S(xi)
iii.三对角方程组用追赶法求解(书P160)。
实验2.3:(一维插值的应用—画图) 画你自己的手的形状,在MATLAB中输入
figure('position',get(0,'screensize')) axes('position',[0 0 1 1]) [x,y]=ginput;
0 0.0 0.8 1 2 3 4 5 6 7 8 9 10 0.2 0.79 1.53 2.19 2.71 3.03 3.27 2.89 3.06 3.19 3.29 将你的手掌张开放在计算机屏幕上,然后使用计算机鼠标选取一系列点勾勒出手的轮廓,按回车键结束ginput过程,这样就获得了一系列你的手掌外形数据点(x,y)。也可以这样获得数据点(x,y),先把手放在一张白纸上,并用笔画出它的轮廓线,然后将纸贴在计算机屏幕上,透过纸能看到平面上的鼠标,并通过ginput记录下轮廓上的点。
将x和y坐标值看作是两个独立变量的函数,独立变量的取值为从1到记录的点的数目。利用MATLAB的插值函数进行插值,并画出你的手掌外形轮廓。
思考题:(二维插值)
1. 在一丘陵地带测量高程,x和y方向每隔100米测一个点,得高程数据如下。试用MATLAB的二维插值函数“interp2”进行插值,并由此找出最高点和该点的高程。 y x 100 200 300 400 100 636 697 624 478 200 698 712 630 478 300 680 674 598 412 400 662 626 552 334 2. 画出山区地貌图。
利用MATLAB的peaks函数生成某山区的一些地点及其高度三维数据(单位:m)。命令格式:[x,y,z]=peaks(n),生成的n阶矩阵x,y,z为测量的山区地点三维数据(n>=30)。根据peaks函数生成的数据,利用Matlab二维插值画出该山区的地貌图和等值线图(提示函数:interp2、meshgrid、plot3等)。
相关MATLAB函数提示: plot(x,y) 作出以数据(x(i),y(i))为节点的折线图,其中x,y为同长度的向量 subplot(m,n,k) 将图形窗口分为m*n个子图,并指向第k幅图 yi=interp1(x,y,xi) 根据数据(x,y)给出在xi的分段线性插值结果yi pp=spline(x,y) 返回样条插值的分段多项式(pp)形式结构 pp=csape(x,y,‘边界类型’,‘边界值’) 生成各种边界条件的三次样条插值 yi=ppval(pp,xi) pp样条在xi的函数值 ZI=interp2(x,y,z,xi,yi) x,xi为行向量,y,yi为列向量,z为矩阵的双线性二维插值 ZI=interp2(…,'spline') 使用二元三次样条插值 ZI=griddata(x,y,z,xi,yi) x,y,z均为向量(不必单调)表示数据,xi,yi为网格向量的三角形线性插值(不规则数据的二维插值) 6
实验