水准网间接平差程序设计(C++)_第1页
水准网间接平差程序设计(C++)_第2页
水准网间接平差程序设计(C++)_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、WORD格式/visual C+6.0编译通过/专业资料整理WORD格式/参考资料/局部网络资料/宋力杰"测量平差程序设计"/专业资料整理WORD格式/ 姚连壁"基于matlab 的控制网平差程序设计"/#include<iostream>#include<fstream>#include <stdlib.h>#include<math.h>#include <iomanip>using namespace std;/classclass SZWPCprivate:int gcz_zs;/ 高差

2、总数int szd_zs;/ 总点数int yz_szd_zs;/ 点数double m_pvv;/pvvint *qsd_dh;/ 高差起点号int *zd_dh;/ 高差终点号char*dm;/ 点名地址数组double*gcz;/ 观测值数组double*szd_gc; / 高程值数组double*P;/ 观测值的权double*ATPA,*ATPL; /法方程系数矩阵与自由项double*dX;/ 高程改正数、平差值double*V;/ 残差doublem_mu;/ 单位权中误差public:SZWPC();SZWPC();int ij(int i,int j);/ 对称矩阵下标计算函

3、数bool inverse(double a,int n);/ 对称正定矩阵求逆(仅存下三角元素 )(参考他人专业资料整理WORD格式voidinputdata(char *datafile);/输入原始数据函数intdm_dh(char *name); / 点名转点号voidca_H0();/ 近似高程计算函数voidca_ATPA();/ 法方程组成函数voidca_dX();/ 高程平差值计算函数voidprintresult(char *resultfile);/ 精度估计与平差值输出函数double ca_V();/ 残差计算函数voidzxecpc(char *resultfile

4、);/最小二乘平差函数;/ 构造函数SZWPC:SZWPC()gcz_zs=0;szd_zs=0;yz_szd_zs=0;/ 析构函数SZWPC:SZWPC()if(gcz_zs>0)delete qsd_dh;delete zd_dh;delete gcz;delete P;delete V;if(szd_zs>0)delete szd_gc;delete ATPA;delete ATPL;delete dX;专业资料整理WORD格式for(int i=0; i<szd_zs;i+)if(dmi!=NULL)delete(dmi);delete dm;/对称矩阵下标计算函数

5、int SZWPC:ij(int i,int j)return (i>=j)" i*(i+1)/ 2+j :j*(j+1)/ 2+i;/ 对称正定矩阵求逆 (仅存下三角元素 )(参考他人bool SZWPC:inverse(double a,int n)double *a0=new doublen;for(int k=0;k<n;k+)double a00=a0;if(a00+1.0=1.0)delete a0;return false;for(int i=1;i<n;i+)double ai0 = ai*(i+1)/ 2;if(i<=n-k-1)a0i= -

6、ai0/a00;elsea0i=ai0/a00;for(int j=1;j<=i;j+)a(i-1)*i/ 2+j-1=ai*(i+1)/ 2+j+ai0*a0j;for(i=1;i<n;i+)a(n-1)*n/ 2+i-1=a0i;an*(n+1)/ 2-1=1.0/a00;专业资料整理WORD格式delete a0;return true;专业资料整理WORD格式/原始数据输入函数专业资料整理WORD格式void SZWPC:inputdata(char *datafile)ifstream infile(datafile,ios:in);if(! infile)cerr<

7、;<" Open error!"<<endl;infile>>gcz_zs>>szd_zs>>yz_szd_zs;int unPnumber=szd_zs-yz_szd_zs;szd_gc=new double szd_zs;dX=new double szd_zs;ATPA=new double szd_zs*(szd_zs+1)/2;ATPL=new double szd_zs;qsd_dh=new int gcz_zs;zd_dh=new int gcz_zs;gcz=new double gcz_zs;V=new

8、 double gcz_zs;P=new double gcz_zs;dm=new char* szd_zs;for(int i=0;i<szd_zs;i+)专业资料整理WORD格式dmi = NULL;/ dm_dh函数根据dmi 是否为NULL 确定dmi 是否为点名地址专业资料整理WORD格式专业资料整理WORD格式char buffer128; /临时数组,保存从文件中读到的点名专业资料整理WORD格式for( i=0;i<=yz_szd_zs-1;i+)/ 读取高程数据专业资料整理WORD格式infile>>buffer;int c=dm_dh(buffer)

9、;infile>>szd_gci;专业资料整理WORD格式for(i=0;i<gcz_zs;i+)/ 读取观测数据专业资料整理WORD格式infile>>buffer; /读取高程起点名专业资料整理WORD格式qsd_dhi=dm_dh(buffer);infile>>buffer;/ 读取高程终点zd_dhi=dm_dh(buffer);infile>>gczi>>Pi; / 读取高差值与路线长度Pi=1.0/Pi;/ 线路长转化为观测值的权infile.close();专业资料整理WORD格式/点名转点号,返回点名对专业资料

10、整理WORD格式应的点号专业资料整理WORD格式intSZWPC:dm_dh(char *name)专业资料整理WORD格式专业资料整理WORD格式for(int i=0; i<szd_zs; i+)if(dmi!=NULL)if(strcmp(name,dmi)=0)return i;/ 将待查点名与已经存入点名数组的点名比较,假设存在返回点号elseint len = strlen(name);/ 判断点名长度dmi = new charlen+1;/为点名申请存储空间专业资料整理WORD格式strcpy(dmi, name);/待查点名是一个新的点名,将新点名的地址放到dm数组专业

11、资料整理WORD格式中专业资料整理WORD格式return i;/返回点号专业资料整理WORD格式专业资料整理WORD格式return -1;/dm数组已经存满,且没有待查点名专业资料整理WORD格式专业资料整理WORD格式/高程近似值计算void SZWPC:ca_H0()专业资料整理WORD格式for(int i=yz_szd_zs;i<szd_zs;i+)szd_gci=-10000.9;/ 为计算机设置区分未知高程点的标志for(int j=1;j+)int k=0; / 计算出近似高程的点数for(i=0;i<gcz_zs;i+)int k1=qsd_dhi;/ 高差起点

12、号int k2=zd_dhi;/ 高差终点号if(szd_gck1>-10000.0 && szd_gck2<-10000.0)/k1点高程或高程近似值,k2 点高程或高程近似值未知szd_gck2=szd_gck1+gczi;/ 计算近似高程k+;elseif(szd_gck1<-10000.0 && szd_gck2>-10000.0)/k2 点高程或高程近似值, k1 点高程或高程近似值未知szd_gck1=szd_gck2-gczi;/ 计算近似高程k+;if(k=(szd_zs-yz_szd_zs)break;/所有的近似高程计

13、算完成,退出/ 组成法方程void SZWPC:ca_ATPA()/int t=szd_zs;for(int i=0; i<szd_zs*(szd_zs+1)/2; i+) ATPAi=0.0;/ 赋初值for(i=0; i<szd_zs; i+) ATPLi=0.0;/赋初值for(int k=0; k<gcz_zs; k+)int i=qsd_dhk;/ 获取点号int j=zd_dhk;/ 获取点号double Pk=Pk;/ 获取权值专业资料整理WORD格式double lk=gczk-(szd_gcj-szd_gci);/ 获得第 k 个自由项ATPLi-=Pk*l

14、k;/ 获得法方程自由项ATPLj+=Pk*lk;ATPAij(i,i)+=Pk;/获得法方程系数矩阵ATPAij(j,j)+=Pk;ATPAij(i,j)-=Pk;/ 高程平差值计算void SZWPC:ca_dX()for(int i=0;i<yz_szd_zs;i+) ATPAij(i,i)=1.0e30;/ 处理点if(!inverse(ATPA,szd_zs)/矩阵求逆 cerr<<"法方程系数矩阵降秩 !"<<endl;/ 矩阵为奇异矩阵,无法求逆 exit(0);/ 退出程序for(i=0; i<szd_zs; i+)/ 计

15、算高程改正数double xi=0.0;for(int j=0; j<szd_zs; j+)xi+=ATPAij(i,j)*ATPLj;dXi=xi;szd_gci+=xi;/ 计算高程平差值/ 残差计算doubleSZWPC:ca_V()double pvv=0.0;for(int i=0;i<=gcz_zs-1;i+)int k1=qsd_dhi;int k2=zd_dhi;Vi=szd_gck2-szd_gck1-gczi;pvv+=Vi*Vi*Pi;专业资料整理WORD格式return(pvv);/ 原始数据和平差值输出voidSZWPC:printresult(char

16、*resultfile)double pvv=ca_V();/残差计算ofstream outfile(resultfile,ios:out);/以输出方式翻开文件,假设文件不存在,创立文件/ 输出原始观测数据outfile<<endl<<" 观测总数: "<<gcz_zs<<""<<" 总点数 :"<<szd_zs;outfile<<" "<<" 点数: "<<yz_szd_zs<

17、<endl; outfile<<endl<<"= 高程 ="<<endl;/输出原始观测数据点点号、高程for(int i=0;i<=yz_szd_zs-1;i+)outfile<<""<<dmi;outfile<<setiosflags(ios:fixed);outfile<<setw(10)<<setprecision(4)<<szd_gci<<endl;outfile<<endl<<endl&l

18、t;<"=高差观测值="<<endl<<endl;/输出原始观测数据高程观测值与路线长outfile<<" 起始点名 "<<""<<" 终点点名 "<<""<<" 高差观测值(m)"<<""<<" 两点间距离 (km)"<<endl;for(i=0;i<=gcz_zs-1;i+)outfile<<

19、;""<<dmqsd_dhi<<setw(9)<<dmzd_dhi;outfile<<setiosflags(ios:fixed);outfile<<setw(16)<<setprecision(4)<<gczi;outfile<<setiosflags(ios:fixed);outfile<<setw(16)<<setprecision(4)<<1.0/Pi<<endl;m_mu=sqrt(pvv/(gcz_zs-(szd_zs-

20、yz_szd_zs);/计算单位权中误差outfile<<endl<<"=单位权中误差="<<endl;/输出单位权中误差outfile<<endl<<" 0="<<m_mu<<endl;outfile<<endl<<"= 高 程 平 差 值 及 其 精 度="<<endl<<endl;/输出高程平差值及其精度专业资料整理WORD格式outfile<<" 点名近似高程改正数高程平差值

21、中误差 "<<endl;for( i=0; i<szd_zs; i+)outfile<<setw(2)<<dmi;double dx=dXi;double qii=ATPAij(i,i);outfile<<setiosflags(ios:fixed);outfile<<setw(12)<<setprecision(4)<<szd_gci-dx;outfile<<setiosflags(ios:fixed);outfile<<setw(10)<<setpreci

22、sion(4)<<dx;outfile<<setiosflags(ios:fixed);outfile<<setw(11)<<setprecision(4)<<szd_gci;outfile<<setiosflags(ios:fixed);outfile<<setw(10)<<setprecision(4)<<sqrt(qii)*m_mu<<endl;/ 输出观测值平差值及其精度outfile<<endl<<endl<<"= 观

23、测 值 平 差 值 及 其 精 度 ="<<endl<<endl;outfile<<" 起点终 点观测高差 "<<"高差平差值观测权中误差"<<endl;for(i=0;i<=gcz_zs-1;i+)int k1=qsd_dhi;int k2=zd_dhi;double qii=ATPAij(k1,k1);double qjj= ATPAij(k2,k2) ;double qij=ATPAij(k1,k2);double ml=sqrt(qii+qjj-2.0*qij)*m_mu

24、;outfile.width(2);outfile<<dmk1;outfile.width(7);outfile<<dmk2;outfile<<setiosflags(ios:fixed);outfile<<setw(12)<<setprecision(4)<<gczi;outfile<<setiosflags(ios:fixed);outfile<<setw(10)<<setprecision(4)<<Vi;outfile<<setiosflags(ios:fixed);outfile<<setw(10)<<setprecision(4)<<gczi+Vi;outfile<

温馨提示

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

评论

0/150

提交评论