资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
测绘程序设计课程实习报告一、实习目的测量平差程序设计是在我们学习了专业基础课误差理论与测量平差 基础课程后将测量平差和计算机程序设计等课程的综合实践与应用的一门课 程。其目的是在我们学习过平差这门课后增强我们对误差理论与测量平差基础 理论的理解,巩固已掌握的测量平差的基本原理和基本公式以及计算方法,熟 悉测量数据处理的基本技能,培养我们正确应用公式、综合分析问题和解决问 题的能力,并能能够熟练运用所学过的C+语言,使平差理论与计算机结合起来, 将主要的条件平差、间接平差以及水准网平差计算方法过程编写成一般形式的 程序用于数据处理,灵活准确的应用于解决各类数据处理的实际问题当中,为 我们今后步入工作岗位打下了一定的基础。二、实习内容本课程要求我们熟练运用测量平差的基本公式与计算方法和拥有基本的C+编 程能力,以自由组成 3-4 人小组的方式共同学习,在老师的指导下能够按照要 求由简至繁完成以下程序。(一)角弧之间的相互转化复习基本的C+内容、程序结构及编写方法,保证任意角度弧度之间可转化及其转化精度。(二)文件的读入输出在程序外部建立文本文档输入数据使程序具有一般性并且不需要在执行程序时进行输入,同时在程序运行后结果自动生成文件保存。(三)概率运算根据已知题目以及程序进行加以更改调试,建立文本文档读入文件计算标 准 正 态 分 布 函 数 、 B 分 布 的 分 布 函 数 等 概 率 函 数 。(四)矩阵运算实现矩阵的基本加、减、乘、转置及求逆运算,为接下来平差运算程序解决基本运算问题。(五)条件平差与间接平差利用之前以编写过的基本程序,以及平差的公式与算法,根据例题编写程序计算条件平差与间接平差(二者具有一定相似度)。(六)水准网平差 首先利用已知的例题以及水准网计算公式和算法编写特殊可解的水准网平差, 再在其基础上编写一般形式具有广泛应用的普通程序。在将以上基本任务都完成之后还可以进一步编写 GPS 向量网等。三、实习过程(一)角弧之间的相互转化1.编程思路:首先在头文件中要注明#include保证程序中的数学运算合理,然后 建立一个角度是否合理判断的函数,在其中将角度的度、分、秒分别用三个 double型变量a、b、c表示,将输入或计算出的角度改正成合理的形 式(分和秒都小于6 0大于0),如将30 6627化成31 627以及角度的 正负。然后在主函数中选择进行角度转化为弧度或弧度转化为角度,再输入数值 时, 为了使接下来的运算能够计算正确, 如果输入复制现将负值提出 flag=(a00)?-10:10,其中a为角度中的度数,在程序所有计算都运行完毕后在加上其负值-1,角弧转化最根本的是利用公式e=Lx180n,其中e为角度,L为弧度。在角度化弧度中表示为L=(a+b/600+c/36000)/1800*s*4*atan(1), 在弧度化角度中表示为m=L*180/(4*atan(1),其中m为将度分秒化为度的形 式,在利用取整尸将m化为度分秒的形式。计算结果:(二)文件的读入输出1.编程思路: 文件可在计算机外部储存,且能长期保存可读取,也可重新刷写,对文件进行 操作可随时进行数据更换。在角弧相互转化程序的基础上进行更编,在原本输入角度和弧度地方使用文件 操作,首先在头文件处要标明#include,使我们对程序进行文件操作 时的行为合法,在进行打开文件处写上ifstreaminfile(jiao. txt),括号中 要打开的文件名称和格式为txt,并且用if(!infile)判断文件是否成功打开了, 成功打开后,并且在程序结束时要关闭读入的文件infileclose(),解除该磁 盘文件与文件流的关系,就不能再通过文件流对文件进行输入或输出。在输出 计算结果到文件中时写为 ofstreamoutfile;outfile.open(jiao_out.txt); 括号中的为文件输出后所在的文件文件名及其格式,结果所在的文件可以在程 序运行前就建好空白文件,也可不建立,在程序运行后会自动生成一个如括号 里写的文件。其他程序具体操作不进行任何改变,但将输入数值改换为文件的输入输出后, 其结果可以更好的保存, 输入数据时更方便, 而程序更具有一般性。计算结果:三)概率计算1.编程思路根据已知的 probability.cpp 程序对照实际例题改编程序,进行文件输入输出 操作和函数的调用练习,将已知数据输入到程序中求得结果。2. 计 算 结 果 :四)矩阵运算 1.矩阵的表示方法 在程序中矩阵要依靠创建动态数组来表示,创建动态数组是为了储存未知阶数m Xn的二维矩阵,定义动态数组包含两个步骤:第一步,定义与数组元素类型相 同的指针变量;第二步,申请内存并将内存地址赋给指针变量。用动态数组来表 示矩阵的方法有很多例如将二维数组作为一维数组储存本次程序编译就采用了 这种方法将矩阵表示为: double*P=newdoublen;此时P指针指向一个元素个数为n的一维数组。地址 new 的作用是动态分配内存,在程序运行过程中申请分配用于存放初值列 表类型数据的空间,并进行初始化。在所有运算进行完毕之后,要用 delete 将 动态分配建立的对象删除,从而释放空间。除了这种方法之外,还可以直接定义二维数组,或调用函数创建来表示矩阵。 2.矩阵的运算(1)矩阵加法与减法矩阵的加法与减法相似,比较简单。首先还是要进行文件操作,读入两个矩阵 的数值,因为其基本要求是两矩阵的行数与列数对应相等,所以在此程序中首 先需要对两个矩阵进行判断,表示为if(p!=n*m|k!=n*m),若是行列数不相等, 则输出错误信息表示不能进行运算。若是能够进行运算,则只需要两矩阵对应 元素进行一一加减,即* (a+i*hang+j)+*(b+i*hang+j),得到的结果输出即可。 在结束运算后关闭文件输入操作,若是单独作为一个函数,无需文件操作,则 只需要返回指针。(2) 矩阵乘法 矩阵的乘法比起矩阵的加减法要稍稍有一点难度,因为其基本要求是第一个矩 阵的行数和第二个矩阵的列数相同,所以对nXm阶矩阵A和pXq阶矩阵B来 说,在进行编程时首先要进行判断的是第一个矩阵的列数 m 是否与第二个矩阵 的行数P是否相等,若不相等,输出错误信息,提示不能进行运算;若是符合 条件,首先要定义一个新的动态数组C其长度为nXq(n,q要分别与第一个矩 阵的行数和第二个矩阵的列数相同),并将数组C的每一个元素都赋予一个初 始值0。数组C的第i行第j列的元素值等于数组A的第i行元素与数组B的第 j列元素对应相乘后累加。因此*(C+i*m+j)+=(*(A+i*m+k)*(*(B+k*q+j);这里 运用了多次for循环来实现运算。(3) 矩阵的转置(4) 矩阵的转置表达较为简单,进行文件操作,读入两个矩阵的数值,定义一 个与已知矩阵相同长度的数组,使得* (a+i*hang+j) =* (b+j*hang+i) ,然后将 转置后的数组输出即可。若是单独作为一个函数,无需文件操作,则只需要返 回指针。矩阵求逆 矩阵求逆在几种矩阵运算当中是最难的一种。由于在平差计算中,一般是 对权值进行求逆,权阵的特点是对称矩阵,因而对于特殊的对称正定矩阵,在 求逆函数中矩阵的存储是仅存下三角矩阵元素。对称正定矩阵求逆设A为一个nXn阶对称正定矩阵,求A的逆矩阵A -。矩阵求逆分一般分 三步进行:第一步求约化系数,第二步求下三角阵的逆阵,第三步求原矩阵的 逆阵。每一步计算均采用原位替换求解法,即将矩阵中不同位置的元素表达为 相应位置的位置函数值,每一步计算是用新的位置函数值替换相应位置的原有 位置函数值,最终将原矩阵中各位置的元素替换为其逆矩阵中相应位置的元素 计算公式如下:aaaaa=1/a n-1,n-10,0=-a /a (j=1,2,.,n-k-1) n-1,j-10,j0,0=a /a (j=n-k,n-k+1,.,n-1) n-1,n-10,j0,0=a -a a /a (i=1,2,.,n-1;j=1,2,.,n-k-1) i-1,n-1 i,j 0,i 0,j 0,0=a -a a /a (i=1,2,.,n-1;j=n-k,n-k-1,.,n-1) i-1,n-1 i,j 0,i 0,j 0,0k=0,1,2, ,n-1,表示循环变换次数。五)计算结果:条件平差与间接平差1间接平差公式及算间接平差与条件平差有一定的相似度间接平差法(参数平差法)是通过选定 t 个与观测值有一定关系的独立未知量作为参数,将每个观测值都分别表达成这t 个参数的函数,建立函数模型,按最小二乘原理,用求自由极值的方法解出参 数的最或然值,从而求得个观测值的平差值。间接平差的函数模型为:L=F(X);参数的平差值X=X+x;随机模型:D= 2Q= o 2P-100误差方程:V=Bx_L;法方程:BtPBx-BtPL=O;法方程解:x= (BtPB) -iBtPL;单位权中误差:土 竺;n-t参数平差值的协因数阵 Qxx=(BTPB)-1;x=(BTPB)-1BTPLB是一个t Xn 的矩阵;P是一个nXn的对称矩阵;L、x、V都是一个n X1 的矩阵;编程思路: 间接平差的程序编译与条件平差有相似之处,尤其是主函数之前的之前的基础调用函数矩阵的乘法multipy,矩阵转置函数transpose,和矩阵求逆是完 全相同的。在主函数中,依旧是先进行文件操作读入存在txt文档中的B,P,L的数 据,然后进行调用multipy及transpose函数由B、P、L计算计算B PB和BtPL; 数组B的长度为t*n,数组P的长度为n,数组L的长度也n,所以从文本中直 接读入的三个矩阵还不能直接进行运算,为了进行运算我们要将 P 变化一下, 所以我们将定义一个长度为n*n的动态数组P,使得* (P +i*n+i) =* (P+i), 这样,便可以调用矩阵运算的函数计算出BtPB和BtPL,然后调用矩阵求逆函数 求BtPB的逆矩阵(BtPB) -1;由Qxx求得参数x,计算参数的平差值X,残差V; 单位权中误差U。最后求得某参数平差值X.的中误差。.= ujQZT。jXjJ J其中开根号用 sqrt 函数求得。1.计算结果:条件平差 公式及算法:条件平差法是在满足r个条件方程要求下,根据最小二乘原理VTPV=min, 按照求函数的条件极值的方法,求出观测量的改正数V,进而求出观测的最或然 值(平差值),条件方程个数等于多余观测数r=n-t,n为观测值总数,t为必要 观测数。条件平差中设条件方程式为 BV+W=0;V为n维观测值改正数向量;(n为观测值总数);B为run阶系数矩阵;(r为条件方程个数);W为r维条件方程自由向量;有最小二乘法可得联系数法方程为BP-1BTK+W=0;P为观测值的权矩阵并设观测值独立,P为对角矩阵,数组长度为n;K为联系数向量,K=(BPBT) W;法方程:BPBtK+W=O;随机模型:D= 2Q= o 2P-100改正数向量V=PBTK;单位权中误差公式U=土:旦;r观测值平差值的权逆阵Ql=P-1-P-1BT (BP-1BT) -iBPi;编程思路:首先,在程序头文件处广泛定义一个N在下面程序中都为一个其确定的值3,因 为
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号