水准间接平差程序设计
测绘程序设计—实验八-水准网平差程序设计报告
《测绘程序设计()》上机实验报告(Visual C++.Net)班级: 测绘0901班学号: **********姓名: 代娅琴4月29日实验八平差程序设计基础一、实验目旳•巩固过程旳定义与调用•巩固类旳创立与使用•巩固间接平差模型及平差计算•掌握平差程序设计旳基本技巧与环节二、实验内容水准网平差程序设计。
设计一种水准网平差旳程序, 规定数据从文献中读取, 计算部分与界面无关。
水准网间接平差模型:计算示例:近似高程计算:1.水准网平差计算一般环节(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值旳权;(5)构成法方程;(6)解法方程, 求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评估;(9)输出平差成果。
2.水准网高程近似值计算算法3.输入数据格式示例实验代码:#pragma onceclass LevelControlPoint{public:LevelControlPoint(void);~LevelControlPoint(void);public:CString strName;//点名CString strID;//点号float H;bool flag;//标记与否已经计算出近似高程值, 若计算出则为, 否则为};class CDhObs{public:CDhObs(void);~CDhObs(void);public:LevelControlPoint* cpBackObj;//后视点LevelControlPoint* cpFrontObj;//前视点double ObsValue;//高差值double Dist;//测站旳距离};#include"StdAfx.h"#include"LevelControlPoint.h"LevelControlPoint::LevelControlPoint(void){strName=_T("");strID=_T("");H=0;flag=0;}LevelControlPoint::~LevelControlPoint(void){}CDhObs::CDhObs(void){}CDhObs::~CDhObs(void){}#pragma once#include"LevelControlPoint.h"#include"Matrix.h"class AdjustLevel{public:AdjustLevel(void);~AdjustLevel(void);public:LevelControlPoint* m_pKnownPoint;//已知点数组int m_iKnownPointCount;//已知点个数LevelControlPoint* m_pUnknownPoint;//未知点数组int m_iUnknownPointCount;//未知点个数CDhObs* m_pDhObs;//高差观测值数组int m_iDhObsCount;//高差观测值个数public:void SetKnownPointSize(int size);//创立大小为size旳已知点数组void SetUnkonwnPointSize(int size);//创立大小为size旳未知点数组void SetDhObsSize(int size);//创立大小为size旳观测值数组bool LoadObsData(const CString& strFile);//读入观测文献CString* SplitString(CString str, char split, int& iSubStrs);void ApproHeignt(void);//计算近似值private:LevelControlPoint* SearchKnownPointUsingID(CString ID);LevelControlPoint* SearchUnknownPointUsingID(CString ID);LevelControlPoint* SearchPointUsingID(CString ID);CMatrix LevleWeight(void);//计算权矩阵public:void FormErrorEquation(CMatrix &B, CMatrix &L);//构成误差方程void EquationCompute(CMatrix &x);//计算法方程void Accuracy_Assessment(double &r0,CMatrix &Qxx);//精度评估void CompAdjust(double &r0,CMatrix Qx[]);};#include"StdAfx.h"#include"AdjustLevel.h"#include<locale.h>#include"LevelControlPoint.h"#include"math.h"AdjustLevel::AdjustLevel(void){m_pKnownPoint=NULL;//已知点数组m_iKnownPointCount=0;//已知点个数m_pUnknownPoint=NULL;//未知点数组m_iUnknownPointCount=0;//未知点个数m_pDhObs=NULL;//高差观测值数组m_iDhObsCount=0;//高差观测值个数}AdjustLevel::~AdjustLevel(void){if(m_pKnownPoint!=NULL){delete[] m_pKnownPoint;m_pKnownPoint=NULL;}if(m_pUnknownPoint!=NULL){delete[] m_pUnknownPoint;m_pUnknownPoint=NULL;}if(m_pDhObs!=NULL){delete[] m_pDhObs;m_pDhObs=NULL;}}void AdjustLevel::SetKnownPointSize(int size){m_pKnownPoint=new LevelControlPoint[size];//创立动态指针m_iKnownPointCount=size;}void AdjustLevel::SetUnkonwnPointSize(int size){m_pUnknownPoint=new LevelControlPoint[size];m_iUnknownPointCount=size;}void AdjustLevel::SetDhObsSize(int size){m_pDhObs=new CDhObs[size];m_iDhObsCount=size;//高差观测值个数}bool AdjustLevel::LoadObsData(const CString& strFile){CStdioFile sf;if(!sf.Open(strFile,CFile::modeRead)) return false;//创立并打开文献对象CString strLine;bool bEOF=sf.ReadString(strLine);//读取第一行, 即已知点旳数目SetKnownPointSize(_ttoi(strLine));//根据已知点旳数目, 创立已知点数组;int n=0;for(int i=0;i<m_iKnownPointCount;i++)//读取已知点旳点名和高程值{sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pKnownPoint[i].strName=pstrData[0];m_pKnownPoint[i].strID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);m_pKnownPoint[i].flag=1;//已知点不用平差, 故将其旳flag设立为delete[] pstrData;pstrData=NULL;}sf.ReadString(strLine);//读取未知点旳个数SetUnkonwnPointSize(_ttoi(strLine));//根据未知点旳个数创立未知点数组sf.ReadString(strLine);//读取未知点旳点名CString *pstrData=SplitString(strLine,',',n);for(int i=0;i<m_iUnknownPointCount;i++)//将未知点旳点名放入未知点数组{m_pUnknownPoint[i].strName=pstrData[i];m_pUnknownPoint[i].strID=pstrData[i];m_pUnknownPoint[i].H=0;//未知点旳高程值设立为m_pUnknownPoint[i].flag=0;//还没有求得近似高程, 故其flag设立为}if(pstrData!=NULL){delete[] pstrData;pstrData=NULL;}sf.ReadString(strLine);//读取观测值旳个数SetDhObsSize(_ttoi(strLine));//按照观测值旳大小, 创立观测值数组for(int i=0;i<m_iDhObsCount;i++)//分行读取观测值旳数据, 将其存入观测值数组{sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pDhObs[i].cpBackObj=SearchPointUsingID(pstrData[0]);//后视点m_pDhObs[i].cpFrontObj=SearchPointUsingID(pstrData[1]);//前视点m_pDhObs[i].HObsValue=_tstof(pstrData[2]);//高差观测值m_pDhObs[i].Dist=_tstof(pstrData[3]);//距离观测值delete[] pstrData;pstrData=NULL;}sf.Close();return 1;}CString* AdjustLevel::SplitString(CString str, char split, int& iSubStrs) {int iPos = 0; //分割符位置int iNums = 0; //分割符旳总数CString strTemp = str;CString strRight;//先计算子字符串旳数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串自身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串旳数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}//LevelControlPoint* AdjustLevel::SearchKnownPointUsingID(CString ID) {for(int i=0;i<m_iKnownPointCount;i++){if(m_pKnownPoint[i].strID==ID){return &m_pKnownPoint[i];}}return NULL;}//LevelControlPoint* AdjustLevel::SearchUnknownPointUsingID(CString ID) {for(int i=0;i<m_iUnknownPointCount;i++){if(m_pUnknownPoint[i].strID==ID){return &m_pUnknownPoint[i];}}return NULL;}LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID){LevelControlPoint* cp;cp=SearchKnownPointUsingID(ID);if(cp==NULL)cp=SearchUnknownPointUsingID(ID);return cp;}void AdjustLevel::ApproHeignt(void)//用于计算高程近似值旳函数{for(int i=0;i<m_iUnknownPointCount;i++)//计算未知点高程值{if(m_pUnknownPoint[i].flag!=1){//先在未知点作为观测值旳前视点旳状况for(int j=0;j<m_iDhObsCount;j++)//从观测数组里找与未知点有关联旳点{//如果观测值旳前视点是未知点且其后视点已有高程值if((m_pDhObs[j].cpFrontObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpBackObj->flag==1 ){ //前视点=后视点-高差/*m_pUnknownPoint[i].H=m_pDhObs[i].cpBackObj->H -m_pDhObs[i].ObsValue;*/m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue;m_pUnknownPoint[i].flag=1;break;}}if(m_pUnknownPoint[i].flag!=1)//如果通过上一环节未知点仍没有计算出近似值{for(int j=0;j<m_iDhObsCount;j++)//从观测数组里找与未知点有关联旳点 {//如果观测值旳后视点是未知点且其前视点已有高程值if((m_pDhObs[j].cpBackObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpFrontObj->flag==1 ){ //后视点=前视点+高差m_pUnknownPoint[i].H=m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;/*m_pUnknownPoint[i].H=m_pDhObs[i].cpFrontObj->H+m_pDhObs[i].ObsValue;*/m_pUnknownPoint[i].flag=1;break;}}}}if(i==m_iUnknownPointCount-1)//如果已经计算到最后一种未知点{for(int a=0;a<m_iUnknownPointCount;a++){if(m_pUnknownPoint[i].flag!=1)//只要有一种未知点旳近似高程直没有计算{ //则要重新进行上面旳环节直到所有旳未知点旳近似高程值都计算出i=-1;break;}}}}}CMatrix AdjustLevel::LevleWeight(void){CMatrix p(m_iDhObsCount,m_iDhObsCount);p.Unit();double value;for(int i=0;i<m_iDhObsCount;i++){value=(1.0/m_pDhObs[i].Dist);p(i,i)=value;}return p;}void AdjustLevel::FormErrorEquation(CMatrix &B, CMatrix &L){B.SetSize(m_iDhObsCount,m_iUnknownPointCount);L.SetSize(m_iDhObsCount,1);for(int i=0;i<m_iDhObsCount;i++)//建立B系数阵{LevelControlPoint *tmpBack=NULL,*tmpFront=NULL;tmpBack=SearchPointUsingID(m_pDhObs[i].cpBackObj->strID);tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);//找到与第i个观测值有关旳未知点tmpBack->strID;for(int j=0;j<m_iUnknownPointCount;j++){if(m_pUnknownPoint[j].strID==tmpBack->strID)//如果是后视点则前面旳系数为-1{ B(i,j)=-1;continue;}if(m_pUnknownPoint[j].strID==tmpFront->strID)//如果是前视点则前面旳系数为{B(i,j)=1;}}}//建立L矩阵CString tmp;for(int i=0;i<m_iDhObsCount;i++){//l=高差观测值-(后视近似值-前视近似值)/*L(i,0)=m_pDhObs[i].ObsValue-(m_pDhObs[i].cpBackObj->H-m_pDhObs[i].cpFrontObj->H);*/ L(i,0)=m_pDhObs[i].HObsValue-(m_pDhObs[i].cpFrontObj->H -m_pDhObs[i].cpBackObj->H);tmp.Format(_T("%.3f"),L(i,0));L(i,0)=_tstof(tmp);L(i,0)=L(i,0)*1000;//将单位化为mm}}void AdjustLevel::EquationCompute(CMatrix &x)//计算法方程{CMatrix P,B,l;P=LevleWeight(); //P为权矩阵FormErrorEquation(B,l);ApproHeignt();CMatrix BT(m_iUnknownPointCount,m_iDhObsCount);BT=~B; //B旳转置矩阵CMatrix NBB(m_iUnknownPointCount,m_iUnknownPointCount);NBB=BT*P*B;CMatrix NBBl=NBB.Inv();x=NBBl*BT*P*l;for(int i=0;i<m_iUnknownPointCount;i++){m_pUnknownPoint[i].H+=x(i,0);//未知点高程值=近似值+改正数}}void AdjustLevel::Accuracy_Assessment(double &r0,CMatrix &Qxx)//精度评估{CMatrix B,l,P,x;P=LevleWeight(); //P为权矩阵FormErrorEquation(B,l);EquationCompute(x);CMatrix v(m_iDhObsCount,1);v=B*x-l;CMatrix vT(1,m_iDhObsCount);vT=~v;CMatrix r/*(1,l)*/;r=vT*P*v;r0=sqrt(r(0,0)/(m_iDhObsCount-m_iUnknownPointCount));//单位权中误差Qxx.SetSize(m_iUnknownPointCount,m_iUnknownPointCount);CMatrix BT(m_iUnknownPointCount,m_iDhObsCount);BT=~B;CMatrix NBB(m_iUnknownPointCount,m_iUnknownPointCount);NBB=BT*P*B;Qxx=NBB.Inv();}void AdjustLevel::CompAdjust(double &r0,CMatrix Qx[]){ApproHeignt();//计算未知点旳近似高程值并且存入数组CMatrix P(m_iDhObsCount,m_iDhObsCount);P=LevleWeight();//p为权矩阵CMatrix B,L;CMatrix x,Qxx;FormErrorEquation(B,L);//构成误差方程, B为系数矩阵, l为常数项EquationCompute(x);//计算法方程Accuracy_Assessment(r0,Qxx);//精度评估for(int i=0;i<m_iUnknownPointCount;i++)//未知点高程中误差{Qx[i]=sqrt(Qxx(i,i))*r0;}}#include"Matrix.h"#include"locale.h"#include"LevelControlPoint.h"#include"AdjustLevel.h"AdjustLevel LevelComput;CString* SplitString(CString str, char split, int& iSubStrs){int iPos = 0; //分割符位置int iNums = 0; //分割符旳总数CString strTemp = str;CString strRight;//先计算子字符串旳数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串自身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串旳数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}void CIndircLelveDlg::OnBnClickedOpendatafile(){// TODO: 在此添加控件告知解决程序代码UpdateData(TRUE);CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文献)|*.txt"));//创立文献对话框if(dlgFile.DoModal()==IDCANCEL) return;//如果选择取消按钮则返回CString strFileName=dlgFile.GetPathName();//打开获取文献文献名setlocale(LC_ALL,""); //设立语言环境CStdioFile sf;if(!sf.Open(strFileName, CFile::modeRead)) return;InputContent.Empty();//清空字符串str_openContent中旳内容CString strLine;BOOL bEOF=sf.ReadString(strLine);//读取第一行数据while(bEOF)//开始读取顶点数据{bEOF=sf.ReadString(strLine);if(bEOF)InputContent+=strLine+_T("\r\n");}sf.Close();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedSavedata(){// TODO: 在此添加控件告知解决程序代码U pdateData(TRUE);CFileDialog dlgFile(FALSE,_T("txt"),NULL,OFN_EXPLORER,_T("(Level格式)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;sf.WriteString(LevleContent);sf.Close();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedComputelevel(){// TODO: 在此添加控件告知解决程序代码UpdateData(TRUE);setlocale(LC_ALL,"");double *Qx=new double[LevelComput.m_iUnknownPointCount];double r0;pAdjust(r0,Qx);LevleContent.Format(_T("平差后高程值:\r\n"));CString Temp;for(int i=0;i<LevelComput.m_iUnknownPointCount;i++){Temp.Empty();Temp.Format(_T("%s,%.4f\r\n"),LevelComput.m_pUnknownPoint[i].strID,LevelComput.m_pUnknownPoint[i].H);LevleContent+=Temp;}Temp.Format(_T("单位权中误差: %.1f mm\r\n"),r0*1000);LevleContent+=Temp;LevleContent+=_T("未知点高程中误差(mm):\r\n");for(int i=0;i< LevelComput.m_iUnknownPointCount;i++){Temp.Empty();Temp.Format(_T("%s,%.1f\r\n"),LevelComput.m_pUnknownPoint[i].strName,Qx[i]*1000);LevleContent+=Temp;}UpdateData(false);}void CIndircLelveDlg::OnBnClickedSavelevleresult(){// TODO: 在此添加控件告知解决程序代码UpdateData(TRUE);CFileDialog dlgFile(FALSE,_T("txt"),NULL,OFN_EXPLORER,_T("(Level格式)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;sf.WriteString(LevleContent);sf.Close();UpdateData(FALSE);}三、实验成果打开文献数据:平差成果:四、实验心得这从实验是我们测绘程序设计旳最后一次实验, 虽然这个学期我们做了好几次有关旳实验, 但是我却发现自己学旳东西也越来越模糊, 感觉诸多内容都不理解。
水准平差计算步骤
水准平差计算步骤水准平差是测量地面高程的一种方法,用于确定地面高程变化或水平面的形状。
水准平差计算步骤主要包括:制定水准路线、测量高程、针对性质检查、平差计算、平差精度评定等。
下面我们将详细介绍这些步骤。
1.制定水准路线:在进行水准测量之前,需要制定一条水准线路。
首先在需要测量的区域内选择起点和终点,然后根据需要,确定中间的支路,并规划各测点的位置。
制定水准路线时需要考虑地形因素,尽量选择平坦且易于观察和测量的地点。
2.测量高程:按照事先制定的水准路线进行实地测量工作。
在每个测点上,使用水准仪或自动水准仪进行测量。
水准仪会产生一些误差,所以在每个测点上需要进行多次重复测量,取平均值以提高测量的准确性。
3.针对性质检查:在测量之后,对测量结果进行针对性质检查。
检查主要包括两个方面:一是对比连续点之间的高差是否符合实际情况,以确保测量结果的准确性;二是检查高差闭合差,即起点和终点的高差是否一致。
4.平差计算:平差计算是水准平差的核心步骤。
平差计算的目的是消除测量误差,以获得更加准确的高程值。
平差计算可以分为两种方法:高程平差法和改正数平差法。
高程平差法是指在整个水准线上进行平差,消除所有测量误差。
改正数平差法是指在每个测点上计算改正数,然后根据改正数对测量结果进行平差。
5.平差精度评定:在平差计算完成之后,需要对平差结果进行精度评定。
精度评定是通过计算出平差后的高程值的精度,来评价平差结果的可靠性。
通常采用的方法是计算出平差后的高程值的标准差,通过标准差来评估平差结果的精度。
在进行水准平差计算时,还有一些需要注意的细节和技巧:-应注意具有快变曲率的曲线,比如大湾曲线或拱形,此类曲线上眼迅速地变化会产生红落炮,并且误差会变大。
在这种曲线上,可以增加测量的密度,减小测量间距,以提高测量精度。
-为了减小高程差知错造成误差的可能性,可以在测量点附近设置较好的目标。
这样可以减少指向目标的距离和指向目标的指向偏差。
水准网间接平差及可视化程序设计
水准网间接平差及可视化程序设计
段艳慧;葛于祥;张晓莹;郭伟
【期刊名称】《北京测绘》
【年(卷),期】2022(36)4
【摘要】针对测量平差烦琐的矩阵运算问题,本文利用矩阵实验室(matrix laboratory,MATLAB)平台进行水准网平差、精度评价与可视化展示。
由于间接平差误差方程式建立的规律性很强,而条件平差的条件方程式的规律不够明显,本文根据间接平差的原理进行程序设计并进行实例验证,实现了水准网间接平差的程序化及可视化表达,该程序的设计与可视化界面的设计降低了误差出现的概率,极大提高了水准网平差及精度评价的速度和精度,可应用于水准网间接平差的计算中。
【总页数】5页(P488-492)
【作者】段艳慧;葛于祥;张晓莹;郭伟
【作者单位】中国矿业大学(北京)地球科学与测绘工程学院;中国矿业大学环境与测绘学院
【正文语种】中文
【中图分类】P207
【相关文献】
1.粗差探测在水准网平差程序设计中的实现
2.基于Matlab的水准网间接平差程序设计
3.浅议同一水准网条件平差与间接平差处理之异同
4.水准网条件平差粗差检测程序设计方法
5.水准网条件平差粗差检测程序设计方法
因版权原因,仅展示原文概要,查看原文内容请购买。
间接平差教案
间接平差教案教案标题:间接平差教案教案概述:本教案旨在教导学生理解和应用间接平差的概念和方法。
通过教学活动,学生将学会使用间接平差来精确测量和调整地理、工程或其他领域的测量数据。
此教案适用于高中地理、工程或相关课程。
教学目标:1. 理解间接平差的定义和原理。
2. 掌握测量数据中的误差识别和处理方法。
3. 学习间接平差的步骤和计算方法。
4. 运用间接平差解决实际的测量问题。
教学准备:1. 教师准备:a. 熟悉间接平差的原理、步骤和计算方法。
b. 准备介绍间接平差的演示材料、实例和图表。
c. 准备测量工具和设备,如测量仪器、软件或应用程序。
2. 学生准备:a. 学生需要具备基本的测量和数学知识。
b. 准备纸和铅笔以进行计算和练习。
教学活动:1. 引入:a. 向学生介绍间接平差的概念和应用领域,如地理测量、建筑工程等,并解释为什么需要间接平差。
b. 演示一项实际测量任务,展示其中的误差和不精确性。
2. 知识讲解:a. 解释间接平差的步骤:数据收集、误差分析、观测值调整和平差计算。
b. 详细解释每个步骤中所使用的方法和公式。
c. 提供实例和图表以帮助学生理解。
3. 练习:a. 学生进行小组活动,共同解决间接平差的练习问题。
b. 学生使用测量工具和设备,测量一些简单的物体或地点,并记录观测数据。
c. 学生计算并调整观测数据,应用间接平差的方法。
4. 深入学习:a. 引导学生思考间接平差的局限性和应用范围。
b. 讨论间接平差在实际生活和工作中的重要性和应用。
5. 总结:a. 整理学生的学习成果和发现,总结间接平差的关键点。
b. 回答学生的问题和解决疑惑。
评估方法:1. 观察学生在小组活动中的参与程度和讨论质量。
2. 检查学生在练习阶段的观测数据、计算和调整过程。
3. 综合评估学生对于间接平差概念和应用的理解程度。
拓展活动:1. 邀请地理或工程专家来分享实际应用间接平差的案例和经验。
2. 组织学生到实地进行测量活动,将所学的间接平差的方法应用到实践中。
水准网平差程序
AfxGetApp()->m_pMainWnd->MessageBox( "数据文件不存在或数据文件错!", "进程. . . . . .!!!",MB_OK|MB_ICONSTOP);
//重要说明:原始数据文件中,未知点的高程可以随意输入,也可以不输入空缺, 程序自动把待定点高程赋值为 0
} for(i=ne;i<nz;i++) {
fp.ReadString(buff,MAXLINE); sscanf(buff,"%d%s%lf",&dh,ch1,&gc); dm[i]=ch1;H[i]=0; } for(i=0;i<nn;i++) { fp.ReadString(buff,MAXLINE); sscanf(buff,"%d%d%lf%lf",
教师 评语
// Gckzwpc.cpp: implementation of the CGckzwpc class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Survey.h" #include "Gckzwpc.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CGckzwpc::CGckzwpc() { } CGckzwpc::~CGckzwpc() { } bool CGckzwpc::ReadData(CString filename) {
水准网间接平差程序设计
水准网间接平差程序设计水准网间接平差是测量水准网中各测站的高程值,通过观测值的处理,进行计算来消除观测误差,得到准确的高程数据。
在进行水准网间接平差程序设计时,需要考虑观测值的处理方法、具体的计算步骤、误差的传递和消除等因素。
下面将详细介绍水准网间接平差程序设计的内容。
首先,在水准网间接平差的程序设计中,需要对观测值进行处理。
观测值的处理包括检查观测数据的精度、合理性及完整性,并进行数据的筛选和滤波处理。
在这一步骤中,需要使用适当的统计方法对观测数据进行筛选,剔除异常值和明显错误的数据,保留符合要求的观测值。
接下来,在进行水准网间接平差计算之前,需要对网络进行拟合,拟合过程即将观测值与已知高程值进行比较,并进行拟合计算得到误差。
网络拟合可以使用最小二乘法进行计算,即通过最小化观测值与已知高程值的差的平方和,来求得最优拟合结果。
然后,进行水准网的平差计算。
平差计算是根据测站之间的观测关系,通过一系列的计算公式,将所有观测值联立起来,并通过方程组进行求解,得到最终的平差结果。
在这个过程中,需要进行传递误差的计算,即通过误差传递公式计算各点高程值的精度,以评估平差结果的可靠性。
最后,在完成水准网间接平差计算之后,需要对平差结果进行检查和评估。
检查结果是否符合工程要求和精度要求,评估平差的可靠性。
如果结果不符合要求,需要重新进行观测值的处理和计算。
在进行水准网间接平差程序设计时,还需要注意以下几点:1.数据的输入与输出:程序需要提供方便的数据输入和输出方式,以便用户输入观测数据,并输出平差结果。
同时,需要考虑数据的存储和传输方式,确保数据的安全和完整性。
2.程序的可扩展性:设计程序时应考虑未来可能的数据规模扩大和功能的增加。
通过模块化设计和灵活的架构,使程序能够方便地扩展和添加新的功能。
3.用户友好性:程序应提供简单易用的操作界面,提供友好的用户交互方式。
用户应能够方便地输入观测数据和设置计算参数,并能够直观地查看和分析计算结果。
测量程序设计_条件平差和间接平差
程序代码如下:
disp(‘-------水准网间接平差示例-------------’) disp(‘已知高程’) Ha = 5.015 % 已知点高程,单位m Hb = 6.016 % 已知点高程,单位m
A h2 D h1
C h6 E h7 B h4
h5
h3
disp(‘观测高差,单位m’)
L = [1.359; 2.009; 0.363; 1.012; 0.657; -0.357] disp(‘系数矩阵B’)
则: PV AT K
V P A K QA K
T
1 T
4、法方程: 将条件方程 AV+W=0代入到改正数方程V=QATK 中,则得到:
AQAT K W 0
r1 r1 r1
记作: 由于
N aa K W 0
rr
R( Naa ) R( AQAT ) R( A) r
Naa为满秩方阵, K Naa1W ( AQAT )1 ( AL A0 )
if H(1,1)+H(2,1)-H(3,1)+HA-HB==0 && H(2,1)H(4,1)==0 disp(‘检核正确') else disp(‘检核错误') end disp(‘平差后的高程值') HC = HA + H(1,1) HD = HA + H(1,1) + H(4,1)
二、间接平差的基本原理
其中l=L-d.
ˆ 设误差Δ和参数X的估计值分别为V 和 X
则有
ˆ V AX l
X0 为了便于计算,通常给参数估计一个充分接近的近似值
ˆ ˆ X X0 x
则误差方程表示为
水准间接平差程序设计说明书
地球科学与环境工程学院水准间接平差实验报告书课程名:《误差理论与测量平差基础》学号:姓名:黄黎东指导老师:日期: 2015年12月7日一、任务概述利用MATLAB或者C++编程间接平差程序,通过该程序读取观测数据文件,并计算出平差结果。
二、计算结果截图:图一图二图三图四三、水准网图四、输入的数据格式数据格式为TXT文件,如图所示:TXT文件格式说明:(1)第一行格式第一行分别表示观测个数5个,水准点数4个,未知点3个,已知点1个,所有数据用英文逗号隔开(2)已知点数据格式第二行开始是已知点点号和高程,一行列一个已知点点号和高程,由于该水准网只有一个已知点,所有只能列出一行。
图中表示已知点点号为1,高程为237.483m(3)测站起始点号格式(4)测站终点点号格式(5)高差格式(6)距离格式该部分表示测站的起始点点号该部分表示测站的终点点号该部分表示各测站的高差该部分表示各测站的距离S 五、流程图六、附件代码function SDJianJiePingCha()[FileName,PathName] = uigetfile('*.txt','打开水准观测数据');%打开文件f=csvread( strcat(PathName,FileName));%打开文件并存在矩阵f中point=f(1,2);%获取所有水准点个数n=f(1,1);%获得观测个数nt=f(1,3);%获得必要观测个数ty=f(1,4);%获得已知点个数yXX=zeros(point,1);%初始化XX阵等于0,方便下面把已知点高程和未知点参数估值放到XX阵B=zeros(n,t);%初始化B阵,方便下面求V=Bx-l中的系数阵B;for j=1:yXX(j,1)=f(j+1,2);%把已知点高程放到XX阵中enddata=f((2+y):end,:);%从文件中获取观测数据,并放到data阵中h=data(:,3);%从data中获取观测高差,并放到h阵中P=zeros(n);%初始化权阵Pfor j=1:nP(j,j)=10/data(j,4);%以10km观测值为单位权误差计算权阵Pendfor i=1:n%通过循环求B阵point1=data(i,1);%获取某个测站的起始点号point2=data(i,2);%获取某个测站的终点点号if point1>y&&point2>y%当某测站起始点和终点高程都未知时,求B阵第i行B(i,point1-y)=-1;B(i,point2-y)=1;elseif point1<=y&&point2>y%当起始点高程已知和终点高程未知时,求B阵第i 行B(i,point2-y)=1;XX(point2,1)=XX(point1,1)+h(i,1);%求第i个参数估值elseif point1>y&&point2<=y%当起始点高程未知和终点高程已知时,求B阵第i 行B(i,point1-y)=-1;XX(point1,1)=XX(point2,1)-h(i,1);%求第i个参数估值endendl=zeros(n,1);%初始化小l阵,方便下面求V=Bx-l中的系数阵l;for i=1:n%通过循环求小lpoint1=data(i,1);point2=data(i,2);l(i,1)=-(XX(point2,1)-XX(point1,1)-h(i,1));end%带入间接平差数学模型公式进行计算:r=n-t;%求多余观测数N=B'*P*B;W=B'*P*l;x=N\W;X=XX((y+1):end,1)+x; V=B*x-l;L=h+V;a0=sqrt(V'*P*V/r); Qxx=inv(N);Dxx=a0*a0*inv(N);%输出计算结果:disp('参数改正数:') x=x'disp('参数平差值:') X=X'disp('观测值改正数:') V=V'disp('观测值平差值:') L=L'disp('协方差阵:') Dxxdisp('单位权方差:') a0disp('协因数阵:') QxxBlPNWend。
测绘程序设计—实验八 水准网平差程序设计报告
《测绘程序设计》上机实验报告(Visual C++.Net)班级:测绘0901班学号: 04姓名:代娅琴2012年4月29日实验八平差程序设计基础一、实验目的巩固过程的定义与调用巩固类的创建与使用巩固间接平差模型及平差计算掌握平差程序设计的基本技巧与步骤二、实验内容水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。
1.水准网间接平差模型:2.计算示例:近似高程计算:3.水准网平差计算一般步骤(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值的权;(5)组成法方程;(6)解法方程,求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评定;(9)输出平差结果。
4.水准网高程近似值计算算法5.输入数据格式示例实验代码:#pragma onceclass LevelControlPoint{public:LevelControlPoint(void);~LevelControlPoint(void);public:CString strName;trName=pstrData[0];m_pKnownPoint[i].strID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);m_pKnownPoint[i].flag=1;trName=pstrData[i];m_pUnknownPoint[i].strID=pstrData[i];m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=SearchPointUsingI D(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID){return &m_pKnownPoint[i];}}return NULL;}trID==ID){return &m_pUnknownPoint[i];}}return NULL;}LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID){LevelControlPoint* cp;cp=SearchKnownPointUsingID(ID);if(cp==NULL)cp=SearchUnknownPointUsingID(ID);return cp;}void AdjustLevel::ApproHeignt(void)lag!=1){pFrontObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpBackObj->flag==1 ){ =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue;m_pUnknownPoint[i].flag=1;break;}}if(m_pUnknownPoint[i].flag!=1)pBackObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpFrontObj->flag==1 ){ =m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;/* m_pUnknownPoint[i].H=m_pDhObs[i].cpFrontObj->H+m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].flag=1;break;}}}}if(i==m_iUnknownPointCount-1)lag!=1)ist);p(i,i)=value;}return p;}void AdjustLevel::FormErrorEquation(CMatrix &B, CMatrix &L){(m_iDhObsCount,m_iUnknownPointCount);(m_iDhObsCount,1);for(int i=0;i<m_iDhObsCount;i++)pBackObj->strID);tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);trID==tmpBack->strID)trID==tmpFront->strID)bsValue-(m_pDhObs[i].cpBackObj->H-m_pDhObs[i].cpFrontO bj->H);*/L(i,0)=m_pDhObs[i].HObsValue-(m_pDhObs[i].cpFrontObj->H - m_pDhObs[i].cpBackObj->H);(_T("%.3f"),L(i,0));L(i,0)=_tstof(tmp);L(i,0)=L(i,0)*1000;+=x(i,0);xt"));xt"));if()==IDCANCEL) return;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedComputelevel(){f\r\n"), [i].strID,[i].H);LevleContent+=Temp;}(_T("单位权中误差:%.1f mm\r\n"),r0*1000);LevleContent+=Temp;LevleContent+=_T("未知点高程中误差(mm):\r\n");for(int i=0;i< ;i++){();(_T("%s,%.1f\r\n"),[i].strName,Qx[i]*1000);LevleContent+=Temp;}UpdateData(false);}void CIndircLelveDlg::OnBnClickedSavelevleresult(){xt"));if()==IDCANCEL) return;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}三、实验结果打开文件数据:平差结果:四、实验心得这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。
第三章--水准网平差程序设计课件
26
水网观测数据(测段)的组织:
测段号 起点 终点
第三章 水准网平差程序设计
本章难点:
1、近似高程计算 2、最短路线的计算 3、误差方程及法方程的构建 4、直接计算出法方程的系数矩阵BTPB和常 数矩阵BTPL
1
一、水准网间接平差算法概述
该课程中所采用的平差模型为间接平差,即所
选的独立参数的个数等于必要观测数,这样可以 将每个观测值表示成这t个参数的函数,组成观测
20
最短路线搜索函数 FindShortPath (p as integer, exclude as integer, int neighbor()as integer,diff() as double, S() as double) b)路线闭合差计算算法
从一个已知点出发用观测高差依次推算其它
各点的高程,最后闭合到另外一个已知点上,闭
1
AB
2
EC
3
DC
4
BC
5
AD
6
AC
7
AF
测段高差(m)
5.835 1.006 7.384 3.782 2.270 9.64 0.003
测段长(km) 测站数
1.5 0.8 2.1 3.2 1.7 1.3
4.1
27
水准网近似高程计算算法
1、定义一数组a(),将已知点(原有高程 和计算出的近似高程都可视为已知点) 存 到a()数组中; 2、遍历所有测段(从第一个测段到最后 一个测段);
水准网平差程序设计
水准网平差程序设计水准网平差是测绘工程中的一项重要工作,它涉及到对水准测量数据进行处理,以达到测量精度的要求。
水准网平差程序设计通常需要考虑以下几个方面:1. 程序设计的目的和意义水准网平差程序设计的主要目的是通过计算机软件对水准测量数据进行自动化处理,提高数据处理的效率和准确性。
这对于大型工程测量、城市基础设施建设、土地管理等领域具有重要意义。
2. 程序设计的基本要求- 准确性:程序需要能够准确地处理水准测量数据,减少人为误差。
- 稳定性:程序在运行过程中应具有较高的稳定性,避免因系统崩溃等原因导致数据丢失。
- 用户友好性:程序应具备良好的用户界面,使得非专业用户也能方便地使用。
- 扩展性:程序设计应考虑未来可能的功能扩展,以适应不断变化的测量需求。
3. 程序设计的理论基础水准网平差程序设计的理论基础主要包括:- 水准测量原理:了解水准测量的基本原理,包括视线高、转点高、已知点高程等概念。
- 误差理论:掌握测量误差的来源、分类及其对测量结果的影响。
- 最小二乘法:水准网平差通常采用最小二乘法进行数据处理,需要理解其数学原理和应用方法。
4. 程序设计的关键技术- 数据输入:设计高效的数据输入界面,支持多种数据格式的导入。
- 数据处理:实现数据的自动校验、筛选和处理功能。
- 平差计算:编写平差计算算法,包括闭合差计算、误差分配等。
- 结果输出:设计结果输出模块,支持多种输出格式,如文本、图表等。
5. 程序设计的实现步骤1. 需求分析:明确程序设计的目标和用户需求。
2. 系统设计:设计程序的整体架构,包括模块划分、数据流等。
3. 编码实现:根据设计文档进行编码,实现各个功能模块。
4. 测试验证:对程序进行测试,确保其准确性和稳定性。
5. 用户手册编写:编写用户手册,指导用户如何使用程序。
6. 程序设计的注意事项- 数据安全:确保程序在处理数据时的安全性,防止数据泄露。
- 异常处理:程序应能妥善处理各种异常情况,如数据格式错误、计算溢出等。
基于Matlab的水准网间接平差程序设计
基于Matlab的水准网间接平差程序设计赵亚红;周文国【摘要】设计水准网数据结构,存储在文本中,按照水准网的起点、终点、观测数据相对应关系建立矩阵,利用Matlab强大的矩阵运算功能,通过间接平差方法,按照最小二乘原理,求得任意水准网的未知点的最或然高程值,对平差结果输出存储,程序直观、简便。
并用实例验证了其正确性及通用性。
%On the basis of data structure designed, the relation of point s and lines of level net, the surveying data and the known data are st ored in the text, the matrixs were set up through the relation of the jupping -off points, end -points and the surveying data. And a program is designed in MATLAB to get the value of most probable by its strong abilty of calculating matrix, the result was output and stored. At last,the example proved the programme was right.【期刊名称】《华北科技学院学报》【年(卷),期】2011(008)003【总页数】3页(P58-60)【关键词】水准网;间接平差;Matlab【作者】赵亚红;周文国【作者单位】华北科技学院土木工程系,北京东燕郊101601;华北科技学院土木工程系,北京东燕郊101601【正文语种】中文【中图分类】P207.2水准网间接平差的的具体过程是:(1)根据水准网形进行分析,列误差方程;(2)根据误差方程系数列法方程;(3)解算法方程,求参数X及V;(4)求最或然值、精度评定。
毕业设计--水准网条件平差程序设计[管理资料]
本科生毕业设计说明书(毕业论文)题目:水准网条件平差程序设计水准网条件平差程序设计摘要近年来,随着我国经济的快速发展,国家大力于投资各种铁路建设和公路建设,测绘工程的运用也越来越突出。
以水准网布设的高程控制网在各类工程中随处可见。
但观测到的数据存在着各种各样的误差,这就需要我们通过简易平差或严密平差来对数据进行处理,从而使数据能够达到工程的预期精度。
本文主要研究如何解决绘图软件行业标准的网络数据处理问题。
从水准网的结构,平差基本原理、调整模型,基本方程及其解,并对法方程组成,求解,平差值的计算及其精度评定作了介绍。
和Visual ,利用C语言是程序设计的相干事情。
在今后的测量工作中,可结合实际平差方案进行平差计算。
关键词:平差模型;精度评定;程序设计Leveling Network Adjustment Program DesignAbstractIn recent years, with China's rapid economic development, the state vigorously investment in all kinds of railway construction and road construction, the use of mapping project is also more and more prominent. In order to control the network level network in various engineering in everywhere. But the observed data exist various error, this needs us through simple adjustment or rigorous adjustment for data processing, so that data to achieve the desired precision engineering.This paper mainly studies how to solve the problem of mapping software industry standard network data processing. From the structure adjustment of leveling network, the basic principle, adjustment model, basic equation and its solution, and the composition of the solution of equations, adjustment calculation and precision evaluation, gross error elimination are introduced as well. And the use of Visual programming software, using C programming language is related to program design. The measurement work in the future, can be combined with the actual adjustment adjustment calculation.Key words: adjustment model;the accuracy assessment;program design目录摘要 (I)Abstract .......................................................................................................................... I I 第一章绪论 (1) (1) (2) (2)第二章条件平差数学模型 (3)条件平差模型 (3) (6) (8) (11) (13) (17)第三章水准网的设计 (18) (18) (18) (19) (19) (20)第四章C语言介绍 (21) (21) (22) (22)第五章程序设计 (24)水准网条件平差和测角网条件平差实例 (24) (24) (27) (32)参考文献 (57)附录A:外文文献 (57)附录B:中文译文 (69)致谢 (74)第一章绪论施工测量工作是非常基本的,重要环节。
水准网平差程序设计
水准点编号,该点名称
其中点名长度不超过8个字符,即4个汉字。但最好 用字符串命名。
以下为一具有两个已知点、三个待定点和七个测段的
水准网的示例数据,打开TXT文件文件后,内容如下。
2,3,7 4 , 5.016 5 , 6.016 1 , 4 , 1 , 1.359 , 1.1 2 , 4 , 2 , 2.009 , 1.7 3 , 5 , 1 , 0.363 , 2.3 4 , 5 , 2 , 1.012 , 2.7 5 , 1 , 2 , 0.657 , 2.4 6 , 1 , 3 , 0.238 , 1.4 7 , 3 , 5 ,-0.595 , 2.6 1 ,P1 2 ,P2 3 ,P3 4 ,A 5 ,B
组建误差方程,即 B、l的生成
代入相应的公式 进行计算 x 、v
计算待求量 的平差植
精度评定 成果输出
2.1 水准网平差中数据的组织(数据文 件格式的设计)
水准网平差程序设计中数据的组织是一个关键 问题。文件格式的设计就是规定数据文件中包含 的内容、各类数据的先后顺序以及各种数据的书 写格式。从程序设计者的角度来说,数据文件格 式设计相当于告诉用户应当怎样准备数据文件, 当然,程序中也必须按照约定的格式从文件中读 取数据。数据文件由四个部分组成,其格式如下。 1)基本信息部分:该部分仅占一行,其内容为 已知点数N1,未知点数N2,高差观测值个数NS。
设p1选择p2作为邻接点,P2到目标点的路线长
度为S2, p1到p2的路线长度为S12,则p1到目标点 的路线长度S1为
S1=S2+S12 若还有一点P3也是P1的邻接点,则经由P3到 目标点的路线长度为
间接平差的计算步骤
间接平差的计算步骤
嘿,朋友们!今天咱来聊聊间接平差的计算步骤呀。
这间接平差就像是搭积木,一块一块地往上堆,最后搭出个漂亮的“建筑”来。
先得有个“底”呀,这就是选择参数。
你得选好合适的参数,就像选对了积木的形状,不然可搭不好哟。
然后呢,根据观测值列出误差方程,这就好比是把积木按照一定的规则摆上去。
接下来,组成法方程。
这法方程就像是搭积木的“核心结构”,得稳稳当当的。
解这个法方程,就像是给这个“核心结构”加固,让它更牢固。
算出参数的估值后,可别以为就大功告成啦。
还得计算观测值的改正数呢,这就像给搭好的积木做最后的修整,让它更完美。
然后计算单位权中误差,这就像是给整个“建筑”做个质量检测,看看够不够结实。
再计算参数的协因数阵,这就像是给“建筑”做个详细的分析报告,让你清楚每个部分的情况。
你说这间接平差是不是挺有意思的?就像我们做一件事情,一步一步来,每一步都不能马虎。
不然最后搭出来的“积木”可能就歪歪扭扭的啦。
想想看,如果参数选错了,那不就像盖房子根基没打好,后面怎么能盖得稳呢?如果误差方程列得不对,那整个结构不就乱套啦?所以啊,每个步骤都得认真对待,就像对待我们生活中的每一件重要的事情一样。
间接平差虽然有点复杂,但只要我们耐心去学,去理解,就一定能掌握它。
就像我们学习骑自行车,一开始可能会摔倒,但多练几次,不就会了嘛。
总之啊,间接平差是测量学里很重要的一部分,我们可得好好对待它,让它为我们的测量工作出一份力呀!。
间接平差程序设计
间接平差程序设计间接平差程序设计是现代测量技术中的重要一环,它通过计算和优化一系列观测数据,求解未知量的准确值。
在实际测量工程中,程序设计的好坏直接影响测量结果的精确性和可靠性。
本文将以生动、全面且有指导意义的方式介绍间接平差程序的设计要点。
首先,间接平差程序设计要考虑数据的质量控制。
测量数据的精确度和准确度是程序设计的基础,因此必须引入合理的数据处理和质量控制方法。
在测量前,需进行数据预处理,包括数据检查、去除异常值、数据修正等。
同时,为了保证计算结果的可靠性,还需统计数据的精确度和准确度指标,如偏差、方差等。
这些统计指标为后续的程序设计提供了基础数据。
其次,间接平差程序设计要注重数学模型的选择与建立。
根据测量任务的不同,需要选择适当的数学模型,建立测量任务与未知量之间的关系。
常用的数学模型有多项式模型、线性模型、非线性模型等。
在选择数学模型前应充分了解测量任务的特点,避免过于复杂或过于简化的模型。
模型的准确度直接影响最终计算结果的精度,因此,合理选择和建立数学模型是程序设计的核心环节。
然后,间接平差程序设计要注重计算方法的优化。
测量数据量庞大,且存在不同类型的误差,对于计算效率和稳定性要求高。
设计程序时,可采用最小二乘法、最大似然估计法等优化方法,以实现精度和效率的平衡。
同时,针对不同任务,还需克服计算矩阵的秩亏、条件数过大等问题,设计相应的算法和模型。
通过优化计算方法,可以提高程序的运行速度和结果的准确度。
最后,间接平差程序设计要充分考虑软件工程的要求。
测量任务是一个复杂的过程,需要进行大量的数据处理、计算和结果分析。
因此,程序应具备良好的可读性、可维护性和可扩展性。
良好的代码结构、注释和文档,能够保证程序的易读性和易理解性,并便于后续开发和维护工作。
此外,程序还应具备友好的用户界面,便于用户输入数据、查看结果,并提供适当的错误处理机制。
综上所述,间接平差程序设计是现代测量技术不可或缺的一部分。
水准平差程序说明
附、闭合水准平差程序说明一、概述本程序可完成各等级附、闭合、水准路线、水准支线的平差计算,加入尺长改正、正高改正对单一附闭合水准路线进行严密平差。
打印输出观测数据、线路闭合差、各点高程、每公里高差中误差。
二、程序概貌(1)、数据输入菜单实现观测数据文件的建立和数据文件路径的设定。
(2)、平差计算菜单完成平差计算。
(3)、成果输出菜单输出平差计算成果。
(4)、帮助菜单数据文件格式说明。
(5)、结束菜单结束程序。
三、操作方法(1)、建立观测数据文件本程序通过调用WINDOWS下记事本程序建立观测数据文件,也可直接用其它文本编辑软件建立观测数据文件。
选择数据文件菜单下的新建菜单。
数据文件格式为:测段数,尺长改正数,等级,是否支线(支线输1,否则输0)起点点名,纬度,起点高程,终点高程下一点点名,纬度,测段距离,往测测站数,返测测站数,往测高差,返测高差………………直到结束。
如本线路无返测高差则返测高差输0。
例:4,0.0003,4,0135j,24.28, 1295.2741,1295.27412yl1,24.25,1.2,12,14,20.34442,-20.346282yl2,24.22,1.0,10,10,77.30418,-77.302852yl3,24.19,0.8,8,8,55.57608,-55.57765135j,24.28,3.0,30,30,-153.2186,153.2196第一行起点名为135j,纬度为24°28′,起点高程1295.2741,终点高程为1295.2741。
第二行点名为2y11,纬度为24°25′,1.2为测段距离,12为测段的往测站数,14为测段的返测站数,20.34442为往测高差,-20.34628为返测高差。
………………第五行终点名为135j,纬度为24°28′,3.0为测段距离,30为测段的往测站数,30为测段的返测站数,-153.2186为往测高差,153.2196为返测高差。
水准网的间接平差
水准网的间接平差测量平差基础实验报告(三)水准网的条件平差班级学号姓名一、实验原理输入矩阵元素—组成法方程—法方程解算—未知数平差值计算—精度计算。
二、实验目的通过实例水准网间接平差计算,理解水准网间接平差原理,掌握其应用方法,能应用平差软件计算一个实际水准网。
三、主要仪器及耗材计算机和相应平差软件及打印纸。
四、实验内容和步骤根据给定的水准网列出误差方程式并完成相应的间接平差计算。
五、实验地点建测楼测绘机房409步骤:(1)确定未知数及其个数,列出误差方程,确定观测值权阵,权函数式;(2)输入误差系数阵、自由项矩阵、观测值权阵和未知数近似值阵的元素;(3)根据观测值的平差值进行验证。
间接平差计算质量报告观测值个数n:8未知数个数t:3多余观测r:5已知计算数据一:已知矩阵B:100-10000100-1010-110010已知矩阵l:-0.006-0.0030.003-0.008-0.005已知矩阵P:1000000001000000 001000010000000000000000已知矩阵某0:11.42510.3612.521已知矩阵L:0.8520.235-2.3110.15-1.062-1.931-2.166全部计算结果:得到矩阵B的转置1-1000000001-1得到矩阵Nb0000100100000-1110000000000100100110-13-10-14-10-13得到矩阵Nb的逆0.3666666666666670.10.03333333333333330.10.30.1 0.03333333333333330.10.366666666666667得到矩阵W0.003-0.010.002得到矩阵某^:0.000166666666666667 -0.0025-0.000166666666666667得到矩阵V:0.000166666666666667 0.00583333333333333 0.00283333333333333 0.000166666666666667 -0.0025-0.00566666666666667 0.00550.00266666666666667得到平差值L^:1.251166666666670.8578333333333330.237833333333333-2.310833333333330.1475-1.06766666666667-1.9255-2.16333333333333精度评定结果:单位权中误差:0.00485455112926691得到矩阵Q某:0.3666666666666670.10.03333333333333330.10.30.10.03333333333333330.10.366666666666667得到权函数阵:1.5得到权函数协防差阵:3.535E-05六、思考题1.试比较与水准网条件平差的不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
地球科学与环境工程学院水准间接平差实验报告书
课程名:《误差理论与测量平差基础》
学号:
*名:***
指导老师:
日期: 2015年12月7日
一、任务概述
利用MATLAB或者C++编程间接平差程序,通过该程序读取观测数据文件,并计算出平差结果。
二、计算结果截图:
图一图二
图三图四三、水准网图
四、输入的数据格式
数据格式为TXT文件,如图所示:
TXT文件格式说明:
(1)第一行格式
第一行分别表示观测个数5个,水准点数4个,未知点3个,
已知点1个,所有数据用英文逗号隔开
(2)已知点数据格式
第二行开始是已知点点号和高程,一行列一个已知点点号和高
程,由于该水准网只有一个已知点,所有只能列出一行。
图中
表示已知点点号为1,高程为237.483m
(3)测站起始点号格式
(4)测站终点点号格式(5)高差格式
(6)距离格式该部分表示测站的起始点点号
该部分表示测站的终点点号该部分表示各测站的高差
该部分表示各测站的距离S 五、流程图
六、附件代码
function SDJianJiePingCha()
[FileName,PathName] = uigetfile('*.txt','打开水准观测数据');%打开文件
f=csvread( strcat(PathName,FileName));%打开文件并存在矩阵f中
point=f(1,2);%获取所有水准点个数
n=f(1,1);%获得观测个数n
t=f(1,3);%获得必要观测个数t
y=f(1,4);%获得已知点个数y
XX=zeros(point,1);%初始化XX阵等于0,方便下面把已知点高程和未知点参数估值放到XX阵
B=zeros(n,t);%初始化B阵,方便下面求V=Bx-l中的系数阵B;
for j=1:y
XX(j,1)=f(j+1,2);%把已知点高程放到XX阵中
end
data=f((2+y):end,:);%从文件中获取观测数据,并放到data阵中
h=data(:,3);%从data中获取观测高差,并放到h阵中
P=zeros(n);%初始化权阵P
for j=1:n
P(j,j)=10/data(j,4);%以10km观测值为单位权误差计算权阵P
end
for i=1:n%通过循环求B阵
point1=data(i,1);%获取某个测站的起始点号
point2=data(i,2);%获取某个测站的终点点号
if point1>y&&point2>y%当某测站起始点和终点高程都未知时,求B阵第i行B(i,point1-y)=-1;
B(i,point2-y)=1;
elseif point1<=y&&point2>y%当起始点高程已知和终点高程未知时,求B阵第i 行
B(i,point2-y)=1;
XX(point2,1)=XX(point1,1)+h(i,1);%求第i个参数估值
elseif point1>y&&point2<=y%当起始点高程未知和终点高程已知时,求B阵第i 行
B(i,point1-y)=-1;
XX(point1,1)=XX(point2,1)-h(i,1);%求第i个参数估值
end
end
l=zeros(n,1);%初始化小l阵,方便下面求V=Bx-l中的系数阵l;
for i=1:n%通过循环求小l
point1=data(i,1);
point2=data(i,2);
l(i,1)=-(XX(point2,1)-XX(point1,1)-h(i,1));
end
%带入间接平差数学模型公式进行计算:
r=n-t;%求多余观测数N=B'*P*B;
W=B'*P*l;
x=N\W;
X=XX((y+1):end,1)+x; V=B*x-l;
L=h+V;
a0=sqrt(V'*P*V/r); Qxx=inv(N);
Dxx=a0*a0*inv(N);
%输出计算结果:disp('参数改正数:') x=x'
disp('参数平差值:') X=X'
disp('观测值改正数:') V=V'
disp('观测值平差值:') L=L'
disp('协方差阵:') Dxx
disp('单位权方差:') a0
disp('协因数阵:') Qxx
B
l
P
N
W
end。