(整理)测绘程序设计
- 格式:doc
- 大小:267.50 KB
- 文档页数:15
测绘程序课程设计()班级: xxxxxxx 学号: xxxxxxx 姓名:xxxx 题目:XXXXXX二零一六年七月测绘程序课程设计报告第一部分导线网平差系统设计一、需求分析导线网平差程序功能要求:1•优化设计:根据控制网的观测精度与网形,全面评定网的精度2•数据输入:表格化输入、图形化输入、外部数据倒入3•概算:自动完成各方向的曲率改正及边长的高程归化与投影改化,近似坐标的推算等。
4•平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标, 方向观测值,边长观测值等,精度评定。
5•成果输出:控制网图形输出,平差结果报表及其输出,绘制误差椭圆,打印输出等。
6•其它功能:粗差探测与剔除、方差分量估计、闭合差计算、坐标转换、换带计算等。
二、总体设计①设计七个类:Ccontrolpoint (控制点类):定义控制点坐标信息(测站编号,XY坐标)CDistObs(距离观测值类):距离观测值,测站编号,照准编号CAn gleObs(角度观测类):角度观测值,测站编号,照准编号CAngle (角度类):实现角度转换和加减功能CControlNetAdjust.h (导线网平差类)1,loadobsdata函数读取数据获取数值2,方向观测值误差方程的建立3,边长观测值误差方程的建立4,确定权5,建立法方程并计算坐标改正数dx,dy6,精度评定7,输出计算结果到.txt文件CMatrix (矩阵类)CDraw对话框绘图类)1,计算结果绘制导线网图形及坐标系2,绘制未知点误差椭圆3, 实现图形平移,缩放的功能②观测数据及其格式设计//自己测试的数据格式已知点个数点号,已知点坐标待测点个数点号观测边总数测站点号,照准点号,观测距离方向观测总数测站点号,照准点号,方向观测值//老师测试的数据格式(最终读取格式)Surveys:. NameRecord亡匚NameDate,加*F##Xletecro^7, TemperaTuie. Pressure, Humidity AngleAccuracy, No b幷3囲Tii eAccurac y.No. A. BStation Count,斗匕#END Header主数据俸:己知数堀:己知蚊据粪型悔识,己知救摇体Cam.PointMo, XA;HD ISL StartPo mtNo:E ndPointNo±昨Ans le T Siad onPciintNo, U 切o 严艺兰*现劃峻据起始标志拠站点号,观测值个数跟准点号,观测值类塑CD/AL 观测值,[取側迤精夏编号]三、详细设计控制网平差模型1、间接平差原理:设未知数个数为t,观测值个数为nV=Bxf-f二BXO+BO+L其中V为n行1列,B为n行t列,X为t行1列的矩阵根据最小二乘准则应在满足VTPV=min时确定未知参数x列出法方程:N bb?- f e = 0其中N bb = B T PBf e = B T Pf从而求出改正数?;2、精度评定2.1单位权中误差的计算中误差计篡;%匚二(¥^九为观测值亍数J t为未狂数个数2.2未知数协因数的计算采用了坐标平差法,实际上法方程系数矩阵的逆就是未知数的协因数阵。
测绘程序设计通过了六周的课程设计,在我们学习完测绘程序设计基础、测量学、测量平差的基础等课程上,通过课程的设计、制定详细的程序设计计划,编码等环节,进一步巩固了我们在这两年多的时间里所学习的知识,做到学以致用,并培养我们对于测绘的综合应用能力,使我们真正地学会自主学习,学会自主处理解决问题的能力。
作为一个测绘工作者,测量过程中免不了要做一些平差的计算,如果遇到测量值较多的平差,则使计算简直成了一种煎熬。
随着电子计算机的出现,数学计算变得简单了很多,同时也使测量平差作业模式发生了翻天覆地的变化,把平差计算者从繁重的、枯燥乏味的数字计算中彻底解放了出来。
学会平差程序设计,可以帮助我们更加灵活的使用计算机来帮助我们做平差处理以及其他的测量计算。
1、角度弧度的相互转化程序;要求屏幕输入角度值或弧度值,将其转化为弧度值或角度值,实现互换。
键盘输入正、负角度,及弧度(弧度没有正负之分),计算实例,检验程序正确与否。
2、文件输入输出;3、矩阵的加减乘;4、条件平差、间接平差的计算;要求首先运用c++语言或c 语言编写程序,首先实现矩阵的加、减、乘、转置的基本运算,以及矩阵求逆运算,然后在文本中读写相关变量数据,根据条件平差和间接平差的基本公式,求出改正数、中误差及高程平差值,并输出到文本中。
具体算例中,条件平差与间接平差的文件书写不同,需分别写在不同的文件中,分别读取。
5、水准网的平差计算。
要求设计平差类,根据水准网平差计算内容及步骤定义平差类成员变量及成员函数,所需数据全部从文件中读取,全部数据存于同一个文件中,并以文本格式保存,文件格式的设计就是规定数据文件中包含的内容、各类数据的先后以及各种数据的书写格式。
数据存储方案设计,将磁盘中的数据读到内存中,按照不同的类别有序地放在变量或数组中,然后进行平差计算,最后将计算结果写到磁盘文件中。
1.老师讲解角度、弧度之间互相转化的计算方法以及注意事项,特别提及角度或弧度为负数的情况。
测绘程序设计与C++编程课程设计指导书长安大学地测学院测绘科学系二0一三年9月测绘程序设计技术课程设计指导书一、课程设计的目的和意义:测绘程序设计是一门实践性很强的专业综合性课程,与《C++语言程序设计》、《测量平差基础》、《面向对象程序设计》以及《控制网平差》等课程都有较为密切的关系。
对测绘工程专业学生而言,掌握基本的数据处理程序设计技术具有重要的意义。
为加深学生对相关数据处理程序基本特点、面向对象的软件分析与设计思想和方法的进一步理解,进一步掌握面向对象的测绘数据处理程序开发的基本特点和技术,在《测绘程序设计与C++编程》课程结束后安排为期二周的测绘程序设计技术课程设计。
课程设计将基于在课程中学习的基本知识,开发具有一定应用或研究价值的测绘工程数据处理应用程序模块,以达到锻炼学生面向对象的软件分析与程序设计能力并培养良好的编程习惯,培养学生面向对象的程序设计思想以及基本的数据处理程序设计能力。
本课程设计旨在通过较为具体、充分的程序分析与设计训练,使学生掌握数据处理程序的开发特点、面向对象的问题分析思想与方法以及程序设计技术,为进一步充分利用计算机技术解决测绘工程的专业技术问题奠定一定的基础。
二、课程设计主要内容:测绘程序设计课程设计的主要目的是通过具体问题分析与程序设计的过程锻炼学生分析问题、掌握数据处理软件设计与编程的基本技术和方法。
课程设计的主要工作内容如下:1.通过充分的上机练习,了解测绘数据处理问题的基本特点、面向对象的问题分析思想与程序开发方法,掌握软件开发、调试与测试的基本技术。
2.分析课程中相关类的基本结构与模块功能,进一步理解并掌握面向对象的问题分析思想与程序设计技术以及测绘数据处理问题的基本特点、程序设计方法。
3.分项目开发相关测绘数据处理程序模块,开展相关问题概念模型分析、类结构设计、代码编写、调试、测试等工作,要求每人至少开发如下9个程序模块中的两个。
选题要求:题目(1)为必选题目;(2)-(9)每人至少选择一题,除题目(1)外每班选择相同题目人数不得多于5人(做两项以上题目者不受此条件限制);选题工作由各班班长具体负责,在课程设计开始前完成选题工作,课程设计开始后上报各班选题情况汇总表。
《测绘程序设计()》上机实验报告(Visual C++.Net)班级:测绘0901学号: 0405090122姓名:宋玲君序号:实验一二零一二年二月实验一 Visual C++.net环境和简单程序设计内容:熟悉Visual C++.net环境和简单程序设计要求:(1)启动与退出VC++.net,熟悉VC++.net的开发环境,通过向导生成基于对话框的应用程序。
使用MSDN查看命令按钮,标签和文本框的主要属性和方法。
(2)打开Microsoft visual studio 2010文档,浏览“visual studio文档”目录下的内容,并从“visual studio文档->Visual C++->示例”目录下下载一个程序,编译并运行之。
(3)设计一个已知三边边长计算三角形面积的程序。
步骤:(1)在【文件】菜单上执行【新建】,然后选择“项目”。
(2)在【项目类型】窗格中,选择【Visual C++】下的“MFC”项。
在【模板】窗格中,选择“MFC应用程序”模板。
(3)在窗体上放置4个文本框,4个静态框,3个命令按钮。
(4)设置控件属性,如Staticl的Caption属性设置成a=,用于提示Edit框的输入边长a;(5)把“取消”按钮的Caption属性改为“退出”;双击钱两个按钮,生成Click消息函数,注释掉重载函数。
(6)为4个Edit控件添加绑定变量。
(7)在相应的函数中添加代码:(8)运行和调试程序,运行结果如下:设计技巧:在应用程序类型中,默认的是“多个文档”选项,这里需要选“基于对话框”选项。
如果没选对就不会出现如下框框,实验也无法继续。
实验总结:这次是第一次做《测绘程序设计基础》这门课的实验,所以一切都感到有点儿陌生。
首先,要安装软件,先是安了V isual studio 2008,但是和我的电脑不兼容,没办法,只能试试V isual studio 2010.费了好长时间才把2010装好。
测绘程序设计(C版)实习报告学号:201420050138姓名:李阳靖班级:1420501Z专业:测绘工程课程名称:测绘程序设计(C及Matlab)指导老师:肖根如2015年12月目录前言1一、实验目的1二、实验环境2三、Turbo C 3.0与VC++6.0的熟悉与操作2四、实验内容梗概3五、实验具体内容4实验一算法4实验二数据类型、运算符和表达式5实验三控制语句6实验四函数9实验五数组11实验六结构体与共用体12六、常见错误及分析14七、程序调试15八、实验心得与体会17九、附录:实习程序设计清单21.、八、-刖言现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。
作为新时代的大学生,我们应该不断努力学习科学文化知识,以适应社会的发展要求,以现代化的科学知识为祖国做贡献。
而C语言作为一种计算机语言,无疑是我们将来工作不可缺少的一门技能,所以我们应该认真学好C语言。
但只是课本上的知识是不够的,我们应该将从课本上学到的理论知识应用到实践中,通过不断的实践,在实践中发现错误解决错误,并不断创新,最后能熟练的运用所学的知识,充分掌握这种工具。
C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。
想学的更深更透彻的话就必须进一步掌握运用C进行程序设计的能力;进一步理解和运用面向过程程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用互联网查找相关的知识并学习;学海之路何其宽广,有必要让我们孜孜不倦的求索下去。
一、实验目的C语言程序设计实习是在学习《C语言程序设计》理论知识的基础上进行的实践教学环节,其目的是培养我们具有初步的C语言程序设计、编程、调试和排除C语言程序语法、逻辑错误的能力。
全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
《测绘程序设计》程课程设计指导书长安大学地测学院测绘科学系二0一八年8月《测绘程序设计》课程设计指导书一、课程设计的目的和意义:测绘程序设计具有很强的综合性,与《C++语言程序设计》、《测量平差基础》以及《大地测量学》等课程密切相关。
对测绘工程专业的学生而言,掌握基本的测绘程序设计能力具有重要的意义。
为使学生理解测绘数据处理问题的基本特点、面向对象的软件分析思想与设计方法,基本掌握面向对象的测绘数据处理程序开发技术,在《C++语言基础与测绘程序设计》课程之后,安排为期二周的测绘程序设计课程设计。
在《C++语言基础与测绘程序设计》课程学习的基本上,开发具有应用价值的测绘工程数据处理应用程序或模块,从问题分析、概念模型设计到程序编写与测试,进行较完整的测绘数据处理程序分析与设计过程。
开展课程设计工作,培养学生基本的面向对象的软件分析与程序设计能力,深入理解面向对象的程序设计思想以及测绘数据处理程序的特点、方法及过程。
进行本次课程设计,是通过开展具体、相对独立的测绘数据处理问题的程序分析与设计过程,使学生理解测绘数据处理程序开发的基本特点、面向对象的问题分析思想、方法及程序设计技术,为能够利用计算机技术解决测绘工程的专业技术问题奠定一定的技术基础。
二、课程设计的内容:开展课程设计的目的,是通过较完整的具体问题分析与程序设计过程,使学生了解并基本掌握测绘数据处理软件分析与设计的方法与过程,培养学生面向对象的测绘数据处理软件设计的基本能力。
课程设计的主要工作内容如下:1.深入分析、理解课程中相关类的基本结构、功能与相互关系,理解面向对象的问题分析方法与程序设计技术,掌握测绘数据处理问题的基本特点与C++程序设计的基本方法。
2.以个人为单位,分题目开发具体测绘数据处理程序模块(以相关课程程序模块为基础),进行相关问题概念模型分析、C++类设计、代码编写、程序测试等程序设计工作。
要求每人至少选择开发下列5个程序模块中的两个。
《测绘程序设计》实验指导书华北科技学院土木工程系测绘工程教研室2010年8月实验一:线性方程组解算一、实验目的与要求⒈初步掌握线性方程组的算法;⒉初步掌握线线性方程组在计算机上实现方法。
二、实验安排⒈实验共需用2学时。
⒉实验每个小组1人,用C/VB等语言在计算机上完成程序代码的编写,并调试通过,然后用算例印证程序的正确性。
三、实验步骤及要点⒈在课余时间,提前准备线性方程组解算程序代码;⒉上机时写入代码,并调试运行;⒊用算例进行印证。
四、实验指导(一)Turbo C工作环境一个C语言程序的实施是从进入Turbo C的集成环境开始的,而进入C语言的环境,一般有两种途径:从DOS环境进入和从Windows环境进入。
1、从DOS环境进入:在DOS命令行上键入:C>CD \TC↙(指定当前目录为TC子目录)C>TC↙ (进入Turbo C环境)这时进入Turbo C集成环境的主菜单窗口,屏幕显示如下图所示。
2、从Windows环境进入:在Windows 95/98环境中,如果本机中已安装了Turbo C,可以在桌面上建立一个快捷方式,双击该快捷图标即可进入C语言环境。
或者从开始菜单中找到“运行”,在运行对话框中键入“C:\TC\TC”,“确定”即可。
刚进入TC环境时,光带覆盖在“File”上,整个屏幕由四部分组成,依次为:主菜单、编辑窗口、信息窗口和功能提示行(或称快速参考行)。
(1)主菜单显示屏的顶部是主菜单条,它提供了8个选择项:File 处理文件(装入、存盘、选择、建立、换名存盘、写盘),目录操作(列表、改变工作目录),退出Turbo C,返回DOS 状态。
Edit 建立、编辑源文件。
Run 自动编辑、连接并运行程序。
Compile 编辑、生成目标文件组合成工作文件。
Project 将多个源文件和目标文件组合成工作文件。
Option 提供集成环境下的多种选择和设置(如设置存储模式、选择编参数、诊断及连接任选项)以及定义宏;也可记录Include、Output及Library文件目录,保存编译任选项和从配置文件加载任选项。
测绘程序设计课程实习报告一、实习目的《测量平差程序设计》是在我们学习了专业基础课《误差理论与测量平差基础》课程后将测量平差和计算机程序设计等课程的综合实践与应用的一门课程。
其目的是在我们学习过平差这门课后增强我们对误差理论与测量平差基础理论的理解,巩固已掌握的测量平差的基本原理和基本公式以及计算方法,熟悉测量数据处理的基本技能,培养我们正确应用公式、综合分析问题和解决问题的能力,并能能够熟练运用所学过的C++语言,使平差理论与计算机结合起来,将主要的条件平差、间接平差以及水准网平差计算方法过程编写成一般形式的程序用于数据处理,灵活准确的应用于解决各类数据处理的实际问题当中,为我们今后步入工作岗位打下了一定的基础。
二、实习内容本课程要求我们熟练运用测量平差的基本公式与计算方法和拥有基本的C++编程能力,以自由组成3-4人小组的方式共同学习,在老师的指导下能够按照要求由简至繁完成以下程序。
(一)角弧之间的相互转化复习基本的C++内容、程序结构及编写方法,保证任意角度弧度之间可转化及其转化精度。
(二)文件的读入输出在程序外部建立文本文档输入数据使程序具有一般性并且不需要在执行程序时进行输入,同时在程序运行后结果自动生成文件保存。
(三)概率运算根据已知题目以及程序进行加以更改调试,建立文本文档读入文件计算标准正态分布函数、B分布的分布函数等概率函数。
(四)矩阵运算实现矩阵的基本加、减、乘、转置及求逆运算,为接下来平差运算程序解决基本运算问题。
(五)条件平差与间接平差利用之前以编写过的基本程序,以及平差的公式与算法,根据例题编写程序计算条件平差与间接平差(二者具有一定相似度)。
(六)水准网平差首先利用已知的例题以及水准网计算公式和算法编写特殊可解的水准网平差,再在其基础上编写一般形式具有广泛应用的普通程序。
在将以上基本任务都完成之后还可以进一步编写GPS向量网等。
三、实习过程(一)角弧之间的相互转化1.编程思路:首先在头文件中要注明#include<cmath>保证程序中的数学运算合理,然后建立一个角度是否合理判断的函数,在其中将角度的度、分、秒分别用三个double型变量a、b、c表示,将输入或计算出的角度改正成合理的形式(分和秒都小于60大于0),如将30°66´27"化成31°6´27" 以及角度的正负。
然后在主函数中选择进行角度转化为弧度或弧度转化为角度,再输入数值时,为了使接下来的运算能够计算正确,如果输入复制现将负值提出flag=(a<0.0)?-1.0:1.0,其中a为角度中的度数,在程序所有计算都运行完毕后在加上其负值-1,角弧转化最根本的是利用公式θ=L×180÷π,其中θ为角度,L为弧度。
在角度化弧度中表示为L=(a+b/60.0+c/3600.0)/180.0*s*4*atan(1),在弧度化角度中表示为m=L*180/(4*atan(1)),其中m为将度分秒化为度的形式,在利用取整’/’将m化为度分秒的形式。
2.计算结果:(二)文件的读入输出1.编程思路:文件可在计算机外部储存,且能长期保存可读取,也可重新刷写,对文件进行操作可随时进行数据更换。
在角弧相互转化程序的基础上进行更编,在原本输入角度和弧度地方使用文件操作,首先在头文件处要标明#include<fstream>,使我们对程序进行文件操作时的行为合法,在进行打开文件处写上ifstream infile("jiao.txt"),括号中要打开的文件名称和格式为txt,并且用if(!infile)判断文件是否成功打开了,成功打开后,并且在程序结束时要关闭读入的文件infile.close(),解除该磁盘文件与文件流的关系,就不能再通过文件流对文件进行输入或输出。
在输出计算结果到文件中时写为ofstream outfile;outfile.open("jiao_out.txt");括号中的为文件输出后所在的文件文件名及其格式,结果所在的文件可以在程序运行前就建好空白文件,也可不建立,在程序运行后会自动生成一个如括号里写的文件。
其他程序具体操作不进行任何改变,但将输入数值改换为文件的输入输出后,其结果可以更好的保存,输入数据时更方便,而程序更具有一般性。
2.计算结果:(三)概率计算1.编程思路根据已知的probability.cpp程序对照实际例题改编程序,进行文件输入输出操作和函数的调用练习,将已知数据输入到程序中求得结果。
2.计算结果:(四)矩阵运算1.矩阵的表示方法在程序中矩阵要依靠创建动态数组来表示,创建动态数组是为了储存未知阶数m×n的二维矩阵,定义动态数组包含两个步骤:第一步,定义与数组元素类型相同的指针变量;第二步,申请内存并将内存地址赋给指针变量。
用动态数组来表示矩阵的方法有很多例如将二维数组作为一维数组储存本次程序编译就采用了这种方法将矩阵表示为:double *P=new double [n];此时P指针指向一个元素个数为n的一维数组。
地址new的作用是动态分配内存,在程序运行过程中申请分配用于存放初值列表类型数据的空间,并进行初始化。
在所有运算进行完毕之后,要用delete 将动态分配建立的对象删除,从而释放空间。
除了这种方法之外,还可以直接定义二维数组,或调用函数创建来表示矩阵。
2.矩阵的运算(1)矩阵加法与减法矩阵的加法与减法相似,比较简单。
首先还是要进行文件操作,读入两个矩阵的数值,因为其基本要求是两矩阵的行数与列数对应相等,所以在此程序中首先需要对两个矩阵进行判断,表示为if(p!=n*m||k!=n*m),若是行列数不相等,则输出错误信息表示不能进行运算。
若是能够进行运算,则只需要两矩阵对应元素进行一一加减,即*(a+i*hang+j)+*(b+i*hang+j),得到的结果输出即可。
在结束运算后关闭文件输入操作,若是单独作为一个函数,无需文件操作,则只需要返回指针。
(2)矩阵乘法矩阵的乘法比起矩阵的加减法要稍稍有一点难度,因为其基本要求是第一个矩阵的行数和第二个矩阵的列数相同,所以对n×m阶矩阵A和p×q阶矩阵B 来说,在进行编程时首先要进行判断的是第一个矩阵的列数m是否与第二个矩阵的行数p是否相等,若不相等,输出错误信息,提示不能进行运算;若是符合条件,首先要定义一个新的动态数组C其长度为n×q(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)矩阵的转置矩阵的转置表达较为简单,进行文件操作,读入两个矩阵的数值,定义一个与已知矩阵相同长度的数组,使得*(a+i*hang+j)=*(b+j*hang+i),然后将转置后的数组输出即可。
若是单独作为一个函数,无需文件操作,则只需要返回指针。
(4)矩阵求逆矩阵求逆在几种矩阵运算当中是最难的一种。
由于在平差计算中,一般是对权值进行求逆,权阵的特点是对称矩阵,因而对于特殊的对称正定矩阵,在求逆函数中矩阵的存储是仅存下三角矩阵元素。
对称正定矩阵求逆设A为一个n×n阶对称正定矩阵,求A的逆矩阵Aˉ¹。
矩阵求逆分一般分三步进行:第一步求约化系数,第二步求下三角阵的逆阵,第三步求原矩阵的逆阵。
每一步计算均采用原位替换求解法,即将矩阵中不同位置的元素表达为相应位置的位置函数值,每一步计算是用新的位置函数值替换相应位置的原有位置函数值,最终将原矩阵中各位置的元素替换为其逆矩阵中相应位置的元素。
计算公式如下:a’n-1,n-1=1/a0,0a’n-1,j-1=-a0,j/a0,0(j=1,2,...,n-k-1)a’n-1,n-1=a0,j/a0,0(j=n-k,n-k+1,...,n-1)a’i-1,n-1=ai,j-a0,ia0,j/a0,0(i=1,2,..,n-1;j=1,2,...,n-k-1)a’i-1,n-1=ai,j-a0,ia0,j/a0,0(i=1,2,..,n-1;j=n-k,n-k-1,...,n-1)k=0,1,2,...,n-1,表示循环变换次数。
1.计算结果:(五)条件平差与间接平差1.间接平差⑴公式及算法:间接平差与条件平差有一定的相似度间接平差法(参数平差法)是通过选定t 个与观测值有一定关系的独立未知量作为参数,将每个观测值都分别表达成这t 个参数的函数,建立函数模型,按最小二乘原理,用求自由极值的方法解出参数的最或然值,从而求得个观测值的平差值。
间接平差的函数模型为: L=F(X);参数的平差值 X=X 0+x ;随机模型:D=σ02Q=σ02P -1误差方程:V=Bx-L ;法方程:B T PBx-B T PL=0;法方程解:x=(B T PB )-1B T PL ;单位权中误差:μ=±t-n VTPV ; 参数平差值的协因数阵Qxx=(B T PB )-1;x=(B T PB )-1B T PLB 是一个t ×n 的矩阵;P 是一个n ×n 的对称矩阵;L 、x 、V 都是一个n ×1的矩阵;⑵编程思路:间接平差的程序编译与条件平差有相似之处,尤其是主函数之前的之前的基础调用函数矩阵的乘法multipy ,矩阵转置函数transpose ,和矩阵求逆是完全相同的。
在主函数中,依旧是先进行文件操作读入存在txt文档中的B,P,L的数据,然后进行调用multipy 及transpose 函数由B 、P 、L 计算计算BᵀPB和B T PL ;数组B 的长度为t*n ,数组P 的长度为n ,数组L 的长度也n ,所以从文本中直接读入的三个矩阵还不能直接进行运算,为了进行运算我们要将P 变化一下,所以我们将定义一个长度为n*n 的动态数组P ’,使得*(P ’+i*n+i )=*(P+i ),这样,便可以调用矩阵运算的函数计算出B T PB 和B T PL ,然后调用矩阵求逆函数求B T PB 的逆矩阵(B T PB )-1;由Qxx 求得参数x ,计算参数的平差值 X ,残差V ;单位权中误差μ。
最后求得某参数平差值X j 的中误差σXj =μJ J X X Q 。
其中开根号用sqrt函数求得。
⑶计算结果:2.条件平差⑴公式及算法:条件平差法是在满足r个条件方程要求下,根据最小二乘原理VᵀPV=min,按照求函数的条件极值的方法,求出观测量的改正数V,进而求出观测的最或然值(平差值),条件方程个数等于多余观测数r=n-t,n为观测值总数,t为必要观测数。