大学实验报告(计算机类)
开课学院及实验室:机械工程与自动化专业实验中心实验时间:年月日
一、实验目的
1、了解CAD中对设计资料的程序化处理方法;
2、编程实现一元函数插值法查询工程数据,增加对工程手册的数据处理的感性认识。
二、内容与设计思想
设法构造某个简单的函数Y=P(_)作为列表函数f(_)的近似表达式,然后计算P(_)值以得到f(_)的近似值。并且使f(_i)-P(_i)=0I=1,2,…,n成立。P(_)就称为f(_)的插值函数,点_1,_2,…,_n称为插值节点。
线性插值Y
yf(_)已知插值点P的相邻两点,11
y2f(_2),则:y
(yyi1)(_i_)yyii
y(_i_i1)
拉格朗日插值y
为多次插值公式,考虑进其他节点位置,可提高插值精度。
二次插值多项式为(抛物线插值):
f2(_)Ai(_)f(_i)
Ai(_)
二元列表函数的插值,从几何意义上讲是在三维空间内选定几个点,通过这些点构造一块曲面g(_,y),用它近似地表示在这区间内原有的曲面f(_,y),从而得插值后的函数值为zkg(_k,yk)。根据插值函数g(_,y)的构造方法分为:
直线-直线插值
以构造曲面g(_,y)代替曲面f(_,y)。K为插值结果。如图1所示。抛物线-直线插值
将AB和CD改为抛物线,k为插值结果K在_oy平面上的投影。如图2所示。抛物线-抛物线插值
u,v,w三点的取得均由抛物线插值而来,k为插值结果K在_oy平面上的投影,要得到k点还需进行一次抛物线插值。如图2所示。
图1直线-直线插值几何示意图
三、使用环境
能运行C等高级语言或面向对象程序设计语言的计算机平台,具体参数以实验室所配置计算机为准。
四、核心代码及调试过程一元函数C程序代码:
include
voidmain(){inti;intn=4;float_i,yi;
float_[4]={1,2,3,4};
floaty[4]={3,6,4,8};
scanf("%f",_i);
if((_i<_[0])||(_i>_[n-1]))
else
}printf("yi=%4.1f
",yi);break;for(i=1;i 抛物线函数插值: include include voidmain() inti; intn=4; float_i,yi; float_[4]={1,2,3,4}; floaty[4]={3,6,4,8}; scanf("%f",_i); if((_i<_[0])||(_i>_[n-1])) else for(i=1;i }else{if((_i-_[i-1])<(_[i]-_i))i=i-1;+printf("yi=%4.1f
",yi);break;yi=(_i-_[i+1])(_i-_[i])y[i-1]/((_[i-1]-_[i])(_[i-1]-_[i+1])) (_i-_[i-1])(_i-_[i+1])y[i]/((_[i]-_[i-1])(_[i]-_[i+1]))+(_i-_[i-1])(_i-_[i])y[i+1]/((_[i+1]-_[i-1])(_[i+1]-_[i])); }printf("yi=%4.1f
",yi);break;4 二元函数插值: include"stdio.h" include"math.h" floatline(float_i,floatyi,float_j,floatyj,float_) floaty; y=(_-_i)(yj-yi)/(_j-_i)+yi; returny; floatparabolic(float_m,floatym,float_i,floatyi,float_k,floatyk,float_) floaty; y=(_-_i)/(_m-_i)(_-_k)/(_m-_k)ym+(_-_m)/(_i-_m)(_-_k)/(_i-_k)yi+(_-_m)/(_k-_m)(_-_i)/(_k-_i)yk;/公式3-3; returny; main() float D[6][10]={{2.59,2.40,2.33,2.21,2.09,2.00,1.88,1.80,1.72,1.01},{1.88,1.80,1.73,1.68,1.62,1.59,1.53,1.49,1.44,1.36},{1.64,1.59,1.55,1.52,1.48,1.46,1.42,1.38,1.34,1.26},{1.49,1.46,1.44,1.42,1.39,1.38,1.34,1.31,1.27,1.20},{1.39,1.37,1.35,1.34,1.33,1.31,1.29,1.27,1.22,1.17},{1.32,1.31,1.30,1.29,1.27,1.26,1.25,1.23,1.20,1.14}}; float_[6]={0.04,0.10,0.15,0.20,0.25,0.30}; floaty[10]={6,3,2,1.5,1.2,1.1,1.05,1.03,1.02,1.01}; float_k,yk,zk; float_a,_b,_c,_d,ya,yb,yc,yd; floatza,zb,zc,zd,ze,zf; inti,j; while(1) }printf("请输入r/d
");scanf("%f",_k);if(_k>=_[0]_k<=_[5])break;elseprintf("越界
");5 while(1) printf("请输入D/d
");scanf("%f",yk); if(yk>=y[9]yk<=y[0])break; else printf("越界
");} for(i=1;i<6;i++) if(_k<=_[i]) _a=_c=_[i-1];_b=_d=_[i]; break; for(j=1;j<10;j++) if(yk>=y[j]) ya=yb=y[j-1];yc=yd=y[j]; break; za=D[i-1][j-1]; zb=D[i][j-1]; zc=D[i-1][j]; zd=D[i][j]; ze=line(_a,za,_b,zb,_k);zf=line(_c,zc,_d,zd,_k);zk=line(ya,ze,yc,zf,yk); printf("%4.2f
",zk);} 五、总结 1.一元函数插值法适合查询哪类数据 答:一元函数插值法适合查询二维平面的离散型数据。 2.二元函数插值法适合查询哪种数据 答:二元函数插值法适合查询三维空间内选定的几个点。 3.抛物线插值时对节点的选择有何要求 (1)若︱_-_i-1︱<=︱_-_i︱,即_靠近_i-1点,则选_i-2,_i-1,_i。 (2)若︱_-_i-1︱>︱_-_i︱,即_靠近_i点,则选_i-1,_i,_i+1。 (3)若_1<=_<=_2,即_靠近表头,则选_1,_2,_3。 (4)若_n-1<=_<=_n,即_靠近表尾,则选_n-1,_,_n。 4.实验体会: 机械CAD上机实验总体而言难度较大,虽然当时我选修了C语言编程,但是由于是选修的,就没太过认真的了解和分析,于是在CAD上机的过程中就遇到了非常大的困难。但是在老师的帮助指导下,在同学的耐心帮助下,程序这个问题也慢慢就好些了。而在深入学习机械CAD的过程中,发现CAD系统可以与其他系统集成,成为更有效的计算机辅助系统,让人们的生产生活更加的方便和准确。