圆形工件正次品检验数学模型._第1页
圆形工件正次品检验数学模型._第2页
圆形工件正次品检验数学模型._第3页
圆形工件正次品检验数学模型._第4页
圆形工件正次品检验数学模型._第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、圆形工件正次品检验模型摘要随着科学技术的进步和社会的发展,人们对机械产品的质量和检查方法提出了更高的要求。工件的质量包括尺寸、形状、材质以及表面状况等方面,其中尺寸是评价工件质量的一个重要指标。本文致力于研究检查工件的尺寸的问题,工件的尺寸可以影响到机器的质量,进而影响到生产质量。在生活中工件分为很多中类型,此次我们致力于研究圆形工件的正次品的检查,建立了检查圆形工件的数学模型,设计了程序来帮助检查,这会具有一定的应用性。在检验圆形工件正次品的问题上,我们想到了三个模型。模型一中我们利用圆心到点的距离公式,计算所得的距离是在一个范围之内()即为正品。首先我们任取3个点,选取其中2点做两条不同直

2、线,这两条直线的中垂线的交点即为模拟圆心。然后利用圆心到这36个点的距离与半径比较反过来检验,超出范围的即为次品。模型二中我们先在规定范围内枚举出模拟圆心,然后根据距离公式与半径比较,就可以判断出正次品。模型三中我们利用最小圆覆盖问题来检验正次品,首先以两点的距离为直径画一个圆,使这个圆尽可能包含36个点,求出半径最小的圆即为最小圆。如果此圆包含了所有的点,那么它就是所求的解,如果不能包含就说明有三点及三点在这个圆上。根据三点确定一个圆,只要枚举出所有的三点所确定的圆,再找出所有成立的圆中半径最小的圆,比较此圆半径与所规定的半径范围即可知是否为正品。以上为我们此次所想的三个检查圆形工件正次品的

3、方法。关键词:圆形工件 平面距离 枚举模拟圆心 最小圆覆盖目录一.问题重述1二.问题分析1三.符号说明2四.模型假设3五.模型建立求解及结果分析3六.模型优缺点14七.改进方向14八.参考文献15九.附录16一. 问题重述某种工件为圆形, 半径为10mm0.1mm, 超出此范围即为次品。 测量仪器自动在每个工件的圆周上测量36个数据。假定测量出的二维数据 (, ) 是足够精确的,要求建立一个合理的检验正/次品的模型,对每个工件的36个数据进行计算后给出判断。下面是5个工件的测量文件, 存放顺序为(, ),(, ),(, )(, ),(, ),(, )(, ),(, ),(, )(, ),(,

4、),(, )(, ),(, ),(, )其中表示第个工件第个测量数据 (15, 136)。如第一个工件中31.270, 34.290, 31.227, 36.554, , 30.964, 31.517, 31.105, 32.743。第一个工件31.270 34.290 31.227 36.554 30.660 38.20530276 39.375 29.134 40.928 27.808 42.31726.078 43.503 24928 43.922 22.922 44.47821.188 44.713 19.454 44.459 18.096 44.12616.016 43.195 14

5、.963 42.265 13.513 40.77012.954 39.891 11.957 38.060 11.578 36.18611.420 34.289 11.555 32.551 12.162 30.91912.732 29.450 13.963 27.973 14.615 27.14116.495 25.853 17.972 25.318 19.971 24.72821.712 24.648 23.274 24.806 24.441 25.16626.647 26.181 27.860 27.163 28.981 28.24430.202 29.937 30.964 31.517 3

6、1.105 32.743(第二至第五个工件数据略)二. 问题分析工件半径的误差主要由制造工艺造成.工件不合格的原因可能是半径过大或过小,或是表面粗糙度过大。. 但在这里为了简化模型,我们忽略表面粗糙度对本题的影响。同时假设所给数据相邻两点之间的轮廓曲线以这两点为极点,因此在分析中只针对给出的点作判定,而对在点与点连线过程中有可能出现的超出范围的情况直接不作考虑。根据所给要求,要求工件半径在10mm +0.1mm范围内为正品。而为了解决这个问题,主要是确定工件的圆心位置,将所给的36个点到圆心的距离计算出来,或直接计算所给点构成的圆的半径,与题目所提供的范围比较就可以判断工件是否合格。三. 符号

7、说明符号说明表示工件的序号表示工件上点的序号表示第个工件上第个点的横坐标表示第个工件上第个点的纵坐标表示第个工件的半径表示第个工件上的第个点四. 模型假设1. 假设工件上的某点与理想圆的误差服从正态分布N(,2)。2. 假设工件表面不会出现非常剧烈的起伏,不会有毛刺。3. 假设工件在±1线度内事光滑的。4. 假设所给数据相邻两点之间的轮廓曲线以这两点为极点。5. 假设每个工件的数据选择是随机独立具有代表性的。6. 假设测量的工具误差可忽略。五. 模型建立求解及结果分析运用Matlab以及Excel做出的五个工件的图形如下所示:第一个工件第二个工件第三个工件第四个工件第五个工件模型一1

8、 建立:对每一个工件i,得到了其上得36个数据,这36个数据反映在直角坐标系中是36个离散的点,根据距离公式,可将这36个数据到圆心O的距离求出来,根据圆的定义可知,若求出来的距离,这个工件即为正品。而圆形工件的圆心O可由定理圆的弦的中垂线是经过圆心求出。任取3个点,取其中2个点,根据这2个点的横纵坐标可求出这2个点的所确定的直线的斜率,这2个点的中点为,这样可求出这条弦的中垂线为,另取2点,同理求出,其中垂线为,联立这2条中垂线可得到一个交点,y代入公式即可求出,交点即为圆心O。2 求解:第一工件第二工件第三工件第四工件第五工件3 结果分析:工件序号圆心是否合格1(21.9517,35.10

9、81)否2(-41.1654,18.5773)否3(-24.0207,2.38168)否4(3.77397,-37.2124)否5(18.284,6.54064)否模型二1. 建立:首先我们要模拟一个圆心,从中筛选出 minx,miny,maxx,maxy, 减去半径的范围,确定出了圆心可能的所有可行解的矩形区域。遍历所有可行解,计算36个点到模拟圆心的距离,如果能找出1个符合所有距离小于半径的解,那么此工件为正品,否则为次品。2. 求解:第一工件第二工件第三工件第四工件第五工件3. 结果分析:工件序号是否合格1否2是3是4是5否模型三1. 建立:设想一个足够大的圆,逐渐缩小这个圆,并移动这个

10、圆,直到有两点在这个圆周上,如果这两点的连线不是这个圆的直径,那就说明还可以移动缩小这个圆,直到出现另一个点在这个圆周上,这个三个点所确定的圆就是所要求的圆。这就是模型三的思想最小圆覆盖,若I不在1I-1的最小圆上,则I在1I的最小圆上。若J不在(i)+(1j-1)的最小圆上,则j在(i)+(1J)的最小圆上。对于最小圆覆盖,就是用n个圆去覆盖一个圆,或者用n个圆去覆盖正方形、长方形,等等.例如用n个大小不同的圆去覆盖一个圆,我们有如下证明: 假设被覆盖的圆为母圆,半径设为1。假定要去覆盖母圆的子圆的半径为r。 n=1时,这时只有一个子圆,显然r=1。 n=2时,这时有两个子圆覆盖母圆,那么必

11、有一个子圆至少覆盖母圆的圆周,这时母圆的直径是子圆的一条弦,所以2r2。因此r=1。 n=3时,这时有三个子圆覆盖母圆,则必定要覆盖圆周,故至少有一个子圆要覆盖至少的圆周,因此半径至少为,但可找到r=的三子圆覆盖。(如下图)。将母圆圆周三等分,得A,B,C三点,分别以AB,BC,AC中点为圆心,弦长为半径分别画圆即得。由以上方法依次类推,我们就可用计算机编程得到覆盖36个点的最小的圆。 因此,在此题中,我们首先求出36个点中其中两点间的最长距离,以这两点的距离为直径画一个圆,如果包含了所有的点,那么这就是所求的解;如果不能包含就说明有三点及三点在这个圆上,根据三点确定一个圆,只要枚举出所有的三

12、点所确定的圆,再比较所有成立的圆的半径最小的圆就是所求的,在将这个半径与(9.9,10.1)这个范围比较,若再这之间就是正品,否则则是次品。2. 求解:第一工件第二工件第三工件第四工件第五工件3. 结果分析:工件序号圆心半径是否合格1(21.37,34.64)10.09是2(-42.19,17.91)10.10是3(-24.73,2.00)10.12否4(3.82,-37.19)10.09是5(17.39,6.08)10.08是六. 模型优缺点模型一:优点:较为方便,思想简单,任取3点,取出2条中垂线,得出交点。 缺点:数据随机性太大,不能处理,极端误差数据 ,所以圆心确定,丢失精度,导致判断

13、结果不准。模型二:优点:从 maxx,maxy,minx,miny 角度进行筛选,最大程度上避免了极端数据。 缺点:效率比较低下,复杂度为(n2) 要遍历所有可行解,但每次增加的距离 0.005,不够精确,损失精度模型三:优点:很好的考虑整体的效果,每次从最小解增长,从而满足所有的情况, 算法思想较好,效率也比较高。 缺点:代码相对复杂。七. 改进方向从作图和程序运行结果可得,圆并非很好的模型,不能解决一些非规则的工件,所以我们可以考虑从其他图形着手,比如:椭圆等。如下图:八. 参考文献1圆形工件正次品的检验模型2严喜祖,宋中民,毕春加,数学建模及其实验,科学出版社,2009.083杨尚俊,数

14、学建模简明教程,安徽大学出版社,2006.034姜启源,谢金星,叶俊,数学模型(第三版),高等教育出版社,2003.085 董培仁,一个最优化问题的多角度探求,数学通报J,2005年2期6 袁震东,数学建模与中学数学,数学教学J,2005年1期7 王玉娇,几何中分类思想的运用8 齐行行,米琦,叶颖樑渤海大学学报(自然科学版) 第25卷第1期 2004年3月九. 附录模型一程序代码:/*思想:36个测量数据 反映到平面上 是 36个离散的点 1.先任取 3个点 2条中垂线 交点 即为 模拟圆心2.利用平面直角坐标系 的距离公式 36个点 到圆心的距离 与 半径范围 相比较 来反推 是否符合要求.

15、*/#include<iostream>#include<cmath>using namespace std;const int N=36;double Rx,Ry;struct Pointdouble x,y;Point TT40;double Jisuan(int i)double t1=(TTi.x-Rx)*(TTi.x-Rx);double t2=(TTi.y-Ry)*(TTi.y-Ry);return sqrt(t1+t2);void input()for(int i=1;i<=N;i+)scanf("%lf%lf",&TTi

16、.x,&TTi.y);void Rinit()double x1=(TT1.x+TT2.x)/2;double y1=(TT1.y+TT2.y)/2;double x2=(TT2.x+TT3.x)/2;double y2=(TT2.y+TT3.y)/2;double k1=(TT2.y-TT1.y)/(TT2.x-TT1.x);double k2=(TT3.y-TT2.y)/(TT3.x-TT2.x);Rx=(x2/k2-x1/k1)+(y2-y1)/(1/k2-1/k1);Ry=-(Rx-x1)/k1+y1;bool judge()for(int i=1;i<=N;i+)dou

17、ble ans=Jisuan(i);if(ans<9.9 | ans>10.1) /printf("第%d个点 与虚拟的圆心 距离 不符合, 该距离:%.2lfn",i,ans);return false;return true;void run()input();Rinit();cout<<Rx<<" "<<Ry<<endl;if(judge() printf("YES 满足符合条件 该零件合格n");else printf("NO 不满足符合条件 该零件不合格n

18、");int main()int T;cin>>T;while(T-) run();return 0;模型二程序代码:/*思想:36个测量数据 反映到平面上 是 36个离散的点 1.先规定的范围内枚举 模拟圆心 2.利用平面直角坐标系 的距离公式 36个点 到圆心的距离 与 半径范围 相比较 来反推 是否符合要求.*/#include<iostream>#include<cmath>using namespace std;const int N=36;double Rx,Ry;double minx,miny;double maxx,maxy;st

19、ruct Pointdouble x,y;Point TT40;#define max(a,b)(a>b?a:b)#define min(a,b)(a<b?a:b)double Jisuan(int i)double t1=(TTi.x-Rx)*(TTi.x-Rx);double t2=(TTi.y-Ry)*(TTi.y-Ry);return sqrt(t1+t2);void input()for(int i=1;i<=N;i+)scanf("%lf%lf",&TTi.x,&TTi.y);void init()minx=TT1.x;maxx

20、=TT1.x;miny=TT1.y;maxy=TT1.y;for(int i=2;i<=N;i+)minx=min(minx,TTi.x);miny=min(miny,TTi.y);maxx=max(maxx,TTi.x);maxy=max(maxy,TTi.y);bool judge()double X,Y;for(X=(maxx-10.1);X<=(minx+10.1);X+=0.005)for(Y=(maxy-10.1);Y<=(minx+10.1);Y+=0.005)for(int i=1;i<=N;i+)Rx=X;Ry=Y;double ans=Jisuan(

21、i);if(ans<9.9 | ans>10.1) break;if(i=N) return true;return false;void run()input();init();if(judge() printf("YES 满足符合条件 该零件合格n");else printf("NO 不满足符合条件 该零件不合格n");int main()int T;cin>>T;while(T-) run();return 0;模型三程序代码:/* 算法思想: 最小圆覆盖问题 */*不断添加圆,维护最小圆。如果添加的点i在圆内,不动,否则:

22、问题转化为求1I的最小圆:求出1与I的最小圆,并且扫描j=2I-1,维护(1)+(i)+(2j)的最小圆,如果找到J不在最小圆内,问题转化为:求(1J)+(i)的最小圆。求出I与J的最小圆,继续扫描K=1j-1,找到第一个不在最小圆内的,求出I J K三者交点即可,此时找到了(1j)+(i)的最小圆,可以回到上一步(三点定一圆,所以1J-1一定都在求出的最小圆上)。定理:若I不在1I-1的最小圆上,则I在1I的最小圆上。若J不在(i)+(1j-1)的最小圆上,则j在(i)+(1J)的最小圆上。证明:最小圆必定是可以通过不断放大半径,直到所有以任意点为圆心,半径为半径的圆存在交点,此时的半径就是

23、最小圆。所以上述定理可以通过这个思想得到。这个做法复杂度是O(n)的,当加入圆的顺序随机时,因为三点定一圆,所以不在圆内概率是3/i,求出期望可得是On.*/#include<iostream>#include<cmath>#include<cstdio>using namespace std;const int N=40;struct Point double x,y; ; Point aN,d; double r;double distance(Point p1, Point p2) return (sqrt(p1.x-p2.x)*(p1.x -p2.x

24、)+(p1.y-p2.y)*(p1.y-p2.y); double multiply(Point p1,Point p2, Point p0) return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); void MiniDis(Point p,Point q,int n) /the min distance between two points!d.x=(p.x+q.x)/2.0;d.y=(p.y+q.y)/2.0;r=distance(p,q)/2;int k;double c1,c2,t1,t2,t3;for(k=1;k<=n;k

25、+)if(distance(d,ak)<=r) continue;if(multiply(p,q,ak)!=0.0)c1=(p.x*p.x+p.y*p.y-q.x*q.x-q.y*q.y)/2.0;c2=(p.x*p.x+p.y*p.y-ak.x*ak.x-ak.y*ak.y)/2.0;d.x=(c1*(p.y-ak.y)-c2*(p.y-q.y)/(p.x-q.x)*(p.y-ak.y)-(p.x-ak.x)*(p.y-q.y);d.y=(c1*(p.x-ak.x)-c2*(p.x-q.x)/(p.y-q.y)*(p.x-ak.x)-(p.y-ak.y)*(p.x-q.x);r=dis

26、tance(d,ak);elset1=distance(p,q);t2=distance(q,ak);t3=distance(p,ak);if(t1>=t2 && t1>=t3)d.x=(p.x+q.x)/2.0; d.y=(p.y+q.y)/2.0;r=distance(p,q)/2.0;else if(t2>=t1 && t2>=t3)d.x=(ak.x+q.x)/2.0;d.y=(ak.y+q.y)/2.0;r=distance(ak,q)/2.0;else d.x=(ak.x+p.x)/2.0;d.y=(ak.y+p.y)/2.0

27、;r=distance(ak,p)/2.0;void MiniDiscWithPoint(Point pi,int size) /第三个点 与 要扫描的范围d.x=(pi.x+a1.x)/2.0;d.y=(pi.y+a1.y)/2.0;r=distance(pi,a1)/2.0;for(int j=2;j<=size;j+)if(distance(d,aj)<=r) continue;elseMiniDis(pi,aj,j-1);void input()for(int i=1;i<=N;i+)scanf("%lf%lf",&ai.x,&ai

28、.y);void run()input(); /printf("%.2lf %.2lf 0.00n",a1.x,a1.y); continue; -> only one Point!/此模型无需考虑 因为 已知 每组测试 36个点!r=distance(a1,a2)/2.0; /1,2 两点的距离d.x=(a1.x+a2.x)/2.0;d.y=(a1.y+a2.y)/2.0;for(int i=3;i<=N;i+)if(distance(d,ai)<=r) continue; /如果在 1,2 构成的圆内elseMiniDiscWithPoint(ai,i

29、-1);printf("最小圆覆盖问题 算法完成!n");printf("最小圆的圆心坐标 X: %.2lf Y: %.2lf R: %.2lfn",d.x,d.y,r);if(r>=9.9 && r<=10.1) printf("该零件为合格!n");else printf("该零件为不合格!n");int main()int T;cin>>T;while(T-) run();return 0;Matlab程序代码:x=31.270 30.276 26.078 21.188 16.016 12.954 11.420 12.732 16.495 21.712&#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论