课程设计边角三角网平差程序设计Word文档格式.docx
《课程设计边角三角网平差程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计边角三角网平差程序设计Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
6907.547
Bj03
1466.800
6231.200
待定点
Bj04
1548.200
5403.600
表2观测值精度
边长观测值
固定误差(mm)
1
比例误差(ppm)
方向观测值(′)
表3边长观测值
起点
终点
边长(m)
832.388
770.170
685.482
1392.450
1516.951
418.530
表4方向观测值
方向观测值
(°
′″)
15.57244
29.57251
276.43169
213.5653
15.48098
1.48093
17.59294
66.45528
一、课程设计的目的
学生在学习完误差理论与测量平差基础、测量平差程序设计基础等课程的基础上,设计一个完整的测量数据处理程序,培养学生综合应用量数据处理与计算机应用能力,培养学生主动学习,创新设计能力。
二、课程设计的任务和内容
1.课程设计任务:
在两周的时间内应用者Matlab程序设计语言编制一个完整的边角网严密平差程序,要求有简易的界面,数据输入采用文本输入,采用间接平差模型完成平差的基本计算,能够画出控制网图,输出基本的计算结果,并根据设计过程完成设计报告。
2.程序设计主要内容包括:
1.系统功能设计
2.界面设计
3.流程设计
4.代码书写
5.程序调试
三、课程设计阶段
1.准备阶段
研究设计任务书,分析设计题目,熟悉原始数据,明确设计内容和要求;
制定课程设计计划和进度。
2.熟悉算法模型
阅读误差理论与测量平差基础教材,掌握平面控制网数据处理的数学模型,这里主要是指方向观测量、角度观测量、边长观测量的观测方程和误差方程的构成,研究平面观测数据的组织方法,设计Matlab算法,实现计算的自动表达。
3.功能设计阶段设计程序要实现的功能
平差程序的基本功能包括数据的输入,平差计算,精度评定、成果输出等;
4.流程和界面设计阶段
1.根据平差计算的过程和程序功能,画出流程图,设计简易界面实现数据的输入
和平差计算和成果输出。
在此基础上,根据功能要求,设计简便的界面。
5.代码书写和调试阶段
按照计算流程图和界面设计,根据方向观测值,边长观测值的误差方程的组成,设计Matlab算法,实现误差方程的自动构成,分阶段书写代码,调试实现各个阶段的功能。
6.设计报告撰写阶段
设计报告是对整个设计过程进行综合总结提高,内容包括课设的目的意义、程序设计的内容、算法设计、设计心得等根据设计过程和对测量数据处理以及程序设计的理解进行独立撰写。
四、组织方式进度安排
以小组为单位,每小组5-6人,分工合作共同完成程序设计任务,时间两周,进度安
排如下:
第一周
周一
熟悉设计书内容,制定计划熟悉平差模型
周二
功能设计流程设计绘制流程图观测值数据组织
周三
熟悉观测方程误差方程的构成,列出计算公式,设计Matlab算法
周四
界面设计按照分工进行分模块代码设计完成数据读入模块
周五
分模块进行调试完成误差方程构成模块
第二周
代码书写调试完成平差计算模块
代码书写调试完成输出模块
代码书写调试完成整体调试
撰写设计报告
综合考核
五、考核与成绩评定
1.考核内容
根据考勤、课程设计报告、程序结构、程序代码进行综合评定。
2.成绩评定方法
平时成绩20%,设计报告30%;
程序代码50%(程序20%,运行正确30%),总评成绩分为优、良、中、差四个等级。
设计报告内容完整,图表清晰,代码书写规范,计算结果正确评为优秀。
六、参考文献:
1.武汉大学测绘学院误差理论与测量平差基础2009
2.北京建筑工程学院测量平差计算自编资料2011
3.同济大学Matlab控制网测量平差2006
七、实习报告:
目的与任务:
目的:
基于学过的测量平差理论的基础知识,在matlab中编写一个相对完整的数据平差处理程序,旨在让同学们能够将学到的平差理论知识和计算机的MATLAB软件程序编写有机地结合在起来,让同学在实践过程中更加深刻地理解理论知识并尝试去应用,由此提高每个人学生的思考和动手能力。
任务:
主要任务就是在实习的两周时间内,分组完成一套完整的关于边角三角网的平差数据处理的matlab的程序代码编写与试调任务,其中主要包括:
数据组织与输入、平差计算、精度评定,成果可视化、平差成果输出等。
然后小组上交一份实习总结和小组成员各上交一份个人总结(设计书及总结)。
算法与模型:
算法:
间接平差方法;
模型:
平面控制网中的边角三角网
本次的平差数据处理是采用间接平差的方法(数学模型)而进行的,就三个待定点xy坐标改正数及涉及到的五个观测站的方位角改正数为未知数(11个),进行误差方程的编写和平差计算,精度评定等。
而实际应用是采用所提供的平面控制网中的边角三角网的平差数据模型,分别是就着边长观测量和方向角观测量的观测数据进行平差程序的编写。
程序功能设计:
通过手动地选择数据文件,而后自动地对数据文件中涉及的变量进行赋值和所获得的数据的输出,而后通过实际情况分析得出需要进行平差计算和精度评定等的必要步骤,如本次数据平差的必要步骤就是待定点近似坐标的计算,紧接着就是误差方程的编写,包括系数矩阵和观测权阵的求得,而后就是利用最小二乘法的平差计算和精度评定,并且计算误差椭圆的参数和该椭圆的自动绘制,最后平差成果的输出。
分模块讲解:
数据组织输入和变量赋值
已知点坐标信息:
包括已知点数n0,待定点数nd,点号名pn和已知点坐标xy0
观测值精度信息:
方向观测值精度md,边长观测值精度ma,mb
边长观测值信息:
包括起点bf1,终点bf2,边长观测值L2
方向观测值:
包括测站点df1,照准点df2,方向观测值L1
具体代码截图:
待定点近似坐标的计算
通过所提供的已知点坐标计算得出的已知方位角,在就方向观测值,求出其每一次观测的夹角,而后找出每个测站所拥有的已知点(一个观测方向的两个点)确定其所在观测的行数与其他待定点所在观测方向(必须有一个点是已知点)的关系,求出其他待定点所在观测方向的方位角(注意方位角是否合理问题),而后在边长观测值中找到对应的边长,利用极坐标法最终求得待定点的近似坐标。
x0y0.同时还可以将近似坐标以文本的文件输出,计算代码截图如下:
误差方程式组成
本次平面控制网平差模型中观测量为方向观测量和边长观测量,未知数分为待定点坐标和定点角两类未知数,边角网误差方程的形式如下:
方向观测量:
误差方程:
(系数为:
b1,c1)
式中常数项:
变长观测量:
b2,c2)
其中
误差方程的编写要注意两个问题:
系数的位置确定和是否待定点的判断。
对于方向观测值,未知数不仅包括各待定点坐标(6个),同样包括各测站的定向角,在未知数排序中,定向角未知数在前,待定点坐标在后,则未知数个数为nz+2*nd=11,对于方向观测值,每一列与定向角对应的系数均为-1,与坐标对应的系数即每一列有5个系数(最多),其他系数均为0,及对应的系数矩阵的数值的确定(注意正负号)。
而对于边长观测值,每一列包括边的两个点的对应的改正数(如果两个点都是待定点的话)四个参数,其他均为0,同样还要注意系数的位置问题。
由于这里分别对方向观测量和边长观测量设置两个数组,分别存储系数阵常数项变量,这里设置b1b2c1c2四个数组。
根据观测值序列和未知数序列确定系数矩阵中各元素的位置和大小;
这里将误差方程构成设计成一个function函数文件,输入量为已知点信息,近似坐标,边长观测量,方向观测量,等输出量为误差方程系数,常数项。
代码编写截图:
5.平差计算和精度评定
本次平差的特殊就是结合两个误差方程的数据进行同时平差,具体步骤
在得到误差方程的系数之后,根据方向观测值和边长观测值的初步计算观测值权阵(p1p2),严格的精确计算可以采用方差分量估计方法精确计算方向和边长观测值的权。
在得到误差方程之后,可以直接利用矩阵进行方程组的解算(最小二乘法),误差方程分为方向观测误差方程,边长观测误差方程,两者可分别计算,然后再相加。
由于近似坐标不精确,在求取参数时,程序设置了迭代计算并确定终止条件,在改正数满足条件后,即可进行平差值计算和精度统计。
程序截图:
6.误差椭圆参数计算
参考书上的误差椭圆参数计算模型
由于误差椭圆描述了点位精度及其在各个方向的分布,表示了网中点或点之间的误差分布情况,常用误差椭圆对布网方案做精度分析,误差椭圆三个参数为椭圆的长半轴E,短半轴F和主轴方向
本次参数计算是通过单位权中误差,协因素阵,待定点的协方差阵等上一步平差得出的结果或推算结果,来进行误差椭圆确定。
代码截图:
7.控制网图形绘制和误差椭圆绘制
边角三角网控制网图形绘制主要考虑绘制控制网点位分布图,点位标注,边长观测量和方向观测量的绘制等。
基本思路是首先根据坐标绘制控制网散点图,并进行标注,然后根据距离观测值,方向观测值连线,构成完整的控制网图。
至于误差椭圆的绘制则是在控制网图的基础上再加上待定点对应的误差椭圆的绘制就完成了。
(利用Plot命令)
其中有一个特别注意的地方就是参数的设置,要根据实际情况而定。
绘制代码截图:
8.平面控制网成果输出
以生成txt格式文档的形式进行成果输出。
其内容主要包括五个方面内容:
平差计算后的坐标值,待定点点位中误差,误差椭圆参数计算等。
信息具体内容如下:
1.平差计算成果成果总输出;
2.坐标平差成果输出
3.点位误差椭圆参数
4.误差椭圆的绘制
5.方向观测平差成果:
方向观测值,平差值,改正数;
6.边长观测平差成果:
边长观测值,边长平差值,改正数;
代码截图(其中的几个):
平差主界面的设计
此界面为本组实习成果的最大创新之一,就是我们在原本要求的平差程序界面(边角三角网平差程序)的基础上增加了另一个界面,就是小组信息的界面(包括有小组成员照),而两个界面之间利用一个总的界面(小组平差程序设计)进行选择性打开
主界面—小组平差程序设计
总的设计流程图:
代码书写与调试:
由于上面已经展示过几乎所有的代码(根据每一个模块),真正运行整一个程序的时候却是按照步骤一步步地一个模块地运行,但是问题一定会出现的,而且还不是很少,关键就是怎么样通过一步步地发现问题所在,并根据实际情况去试调程序,合理地按照平差理论去运行程序。
一下列举了一些出现的主要问题。
方位角
由于所提供的数据时边角三角网的数据,这样就会涉及到方位角问题,而且还不止一次的出现方位角的运算(如待定点的近似坐标的求解过程中出现过),这就应该惊醒一个重要的细节:
就是所求的方位角是否合理?
怎么样去判断呢?
就是通过if(elseif)语句去判断其与0和360度或者2*pi的关系,在去改正方位角。
原则上一旦出现方位角的求解出都是要用这个语句去判断,这样才能保证精密。
和提高正确性。
单位问题
单位问题出现在两处,就是观测值的单位权的求解处,二是误差方程的系数求解处。
由于这两者是在后面的法方程求解时都要用上所以,在此之前要保证两者的单位相对统一,这个统一要分两处,边长观测量方程系数和方向观测方程系数,特别注意的是原始数据提供的观测精度(两种)的单位,和误差方程的系数的单位,而在实际中,我们组应用的是方向观测用秒为单位,而变成观测以米为单位,这样出来的结果最后的平差数据处理,如精度评定,误差椭圆计算等,也要注意单位问题。
比例参数
根据实际求出的误差椭圆参数(EFfi)的大小和所绘制的三角网的大小,这两者之间通过比例参数的调整才能更好地在显示误差椭圆。
弧度转角度
对于弧度转角度这个小问题,我不得不提,这是一个关键问题。
为什么?
因为我们组把其他问题都解决了后,组的坐标改正数,误差椭圆参数等都很不正常的显示在电脑屏幕上,一次次地打击我们的信心。
最后,我在仔细地对照书本,细心查询,观察异同发现,一个最不关紧要的差异,就是弧度转角度的小问题,我们原来采用的是MATLAB系统自带的弧度转角度的函数,结果我们发现这个问题直接就是导致待定点的近似坐标差异特别大,尤其在待定点3的x,y坐标上面,差了好几米(跟提供的平差结果数据相比),这样后面的就影响到误差方程系数的不正常,和平差计算得出的改正数,单位全中误差,点位误差和误差椭圆参数的异常。
而这样我不得不自己再编两个弧度和角度相互转换的函数文件。
于是重新采用转换函数程序之后,我们的数据就非常正常的出来的。
平差程序设计成果展示
进入界面
导入数据文件
数据文件的查询
查询结果:
近似坐标的计算
计算结果:
控制网点为分布
显示平差计算成果
平差计算成果总输出
点位误差椭圆参数
实习总结:
两周的实习历经百般波折磨难,终于结束了,这两周的时间里,大家经历的是前所未有的实习体验,让我们不单单收货了专业能力,更是给我们的人生上了重大的一课,在课堂上我们都是学习的书本上的理论知识,这次我们把理论知识和计算机编程结合在一起,这才是真正学习到了未来生活工作中所实用的东西,提高了我们真正面对测量平差工作还有matlab软件时的操作能力。
我们在实习中发现自己的问题并及时的解决,让自己在以后的学习工作中不犯同样错误。
在刚拿到实习任务的第一天我们就进行了分组,分完组后,为了能够更快更有效率的完成此次实习,也为了能让组内的每个成员参与进来,首先,我们在组内对各自的任务进行了分配。
大家各自负责一部分的程序代码编写内容,各自针对自己所主要面对的内容查书并向其他各组询问讨论,然后根据书上的代码提示,调通自己负责的这段程序代码,每个人把自己的部分完成后,大家在一起编程查错,经过反复修改弄出整个的成果输出,还有简单的界面设计。
我们的组长是王子强,他和王瑞负责的是主要的数据计算部分还有整体修正还有精度评定部分,这几点可以说是这次程序代码中的核心所以需要他们两个人分担重任,宁子铭负责的是误差椭圆参数的计算和图形的绘制内容,缪云龙负责的则是数据文件的输入部分的程序编写,闪永川负责的是最后的成果输出部分,王梦琦则是负责最后的界面部分程序代码的设计,这些分工只是各自主要负责的项目,但是因为大家能力都有限,所以出现问题后还是集合在一起解决问题再继续进行之后的实习。
一开始,先是将已知点信息录入,这块代码是由我们组的缪云龙主要负责的,这部分的代码看似简单,但还是给我们带来了不小的麻烦,需要在matlab中单独建立一个以‘chkdat’命名的‘function’文件。
这些看似简单的问题却也给我们带来过不少的烦恼。
接下来就是由我们组长王子强和王瑞同学负责的近似坐标计算和相关精度评定的代码编写,这部分非常的复杂,它包含了方位角计算,编写误差方式的程序代码等或大或小的问题。
遇到的首要问题就是我们看不懂书上的近似坐标计算的代码,而书上的代码又存在问题,缺少nk的定义,而想要修正这一点需要读懂整段代码并将nk通过书写给予定义。
还有就是误差方程的系数矩阵的编写程序。
这里有好几个因素要考虑:
方向观测边的方位角计算,未知数的系数位置安放问题,还有就是点号是否是待定点的判断等等诸多问题。
在不断地学习中向其他组成员请教后我们总算输入了正确的代码修正了这部分工作。
算完上面这些计算之后,就是由宁子铭负责的误差椭圆参数的计算和图形的绘制了,这部分的代码编与之前的计算相比就显得简单了一点,但由于我们只能参考教材,而教材的程序又多少有些不适用,程序还是出现了问题,在大家共同的努力下,在同学的帮助下我们还是完成了程序,但是,由于我们数据的单位不统一,导致我们的椭圆参数一直较大,调节了很久才找到问题的所在,纠正后总算是可以了。
而图形的绘制相对就简单些,主要都是将计算与程序相连,再把x,y给予定义就可以了。
出图也完成之后就是由闪永川负责的成果的输出,这部分不难,我们很顺利的完成了,当然这也源自闪永川之前的准备比较充足,让全组的效率得到了提高。
最后的就是,由王梦琦负责的简单界面的设计,在这部分我们也遇到了不小的问题,callback后面的属性值应该是txt文件的名称,但一开始我们却做错了,后来在请教了别组同学还有老师之后才知道应该选用m文件的名称,后来修改之后基本解决了问题。
在大家共同的努力下实习终于圆满的完成了,我们不单单获取了知识更是经历了一场历练,这次的实习对我们每个人而言都是难忘的,我们不仅收货了知识更是让我们在反复修改中经历了身心的磨练,从烦躁不堪到慢慢适应到最后的努力编写,这收获不只是在知识层面的,更是在人格层面的。
编程对我们来说可能并不难,简单的c++和vb编程都是我们组成员以前的强项,但是换了MATLAB后我们不理解那些代码的意义,很多东西逻辑都很通顺但是却不知道该如何编译,但是经过查阅书籍和向老师同学进行请教之后,我们不仅成功的完成了任务,而且还让我们对MATLAB程序的语言有了更深刻的印象,同时也帮我们复习了之前学过的测量平差知识以及计算构架和逻辑。
而不得不再次提起的是,我们本次实习收获最大的还是团结互助的做事方法,耐心修正反复推敲的习惯,不断请教不断学习的能力。
这些收获远远比我们学到的知识来的更重要。
完成了这次实习我们所有人都感觉上了人生中重要的一课。