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

下载本文档

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

文档简介

1、(完整)水准网间接平差程序设计(c+)(完整)水准网间接平差程序设计(c+) 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)水准网间接平差程序设计(c+))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)水准网间接平差程序设计(c+)的全部内容。/ visual c+6.0 编译通过 / 参考资料 / 部分

2、网络资料 / 宋力杰测量平差程序设计 /姚连壁基于matlab的控制网平差程序设计 / /#includeincludefstream#include 0)delete szd_gc;delete atpa;delete atpl;delete dx;for(int i=0; iszd_zs;i+)if(dmi!=null)delete(dmi);delete dm;/ 对称矩阵下标计算函数int szwpc::ij(int i,int j)return (i=j)? i(i+1)/2+j :j(j+1)/2+i;/ 对称正定矩阵求逆(仅存下三角元素)(参考他人)bool szwpc::inv

3、erse(double a,int n) double *a0=new doublen; for(int k=0;kn;k+)double a00=a0;if(a00+1。0=1。0)delete a0;return false;for(int i=1;in;i+)double ai0 = ai*(i+1)/2;if(i=n-k1)a0i= ai0/a00;else a0i= ai0/a00;for(int j=1;j=i;j+)a(i1)i/2+j1=ai(i+1)/2+j+ai0a0j;for(i=1;in;i+)a(n1)n/2+i-1=a0i;an*(n+1)/2-1=1.0/a00;

4、delete a0;return true;/ 原始数据输入函数void szwpc:inputdata(char datafile)ifstream infile(datafile,ios::in);if(! infile)cerr” open error!”szd_zsyz_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

5、_zs;zd_dh=new int gcz_zs;gcz=new double gcz_zs;v=new double gcz_zs;p=new double gcz_zs;dm=new char szd_zs;for(int i=0;ibuffer;int c=dm_dh(buffer);infileszd_gci;for(i=0;igcz_zs;i+)/ 读取观测数据infilebuffer; /读取高程起点名qsd_dhi=dm_dh(buffer);infilebuffer;/读取高程终点zd_dhi=dm_dh(buffer);infilegczipi; /读取高差值与路线长度pi=

6、1.0/pi;/线路长转化为观测值的权infile.close();/ 点名转点号,返回点名对应的点号int szwpc:dm_dh(char name) for(int i=0; iszd_zs; i+)if(dmi!=null)if(strcmp(name,dmi)=0)return i;/将待查点名与已经存入点名数组的点名比较,若存在返回点号elseint len = strlen(name);/判断点名长度dmi = new charlen+1;/为点名申请存储空间strcpy(dmi, name);/待查点名是一个新的点名,将新点名的地址放到dm数组中return i;/返回点号re

7、turn 1; /dm数组已经存满,且没有待查点名/高程近似值计算void szwpc:ca_h0()for(int i=yz_szd_zs;iszd_zs;i+)szd_gci=10000。9;/为计算机设置辨别未知高程点的标志for(int j=1;;j+)int k=0; /计算出近似高程的点数for(i=0;i10000.0 & szd_gck210000。0)/k2点高程或高程近似值已知,k1点高程或高程近似值未知szd_gck1=szd_gck2gczi;/计算近似高程k+;if(k=(szd_zs-yz_szd_zs)break;/所有的近似高程计算完成,退出/ 组成法方程voi

8、d szwpc:ca_atpa() /int t=szd_zs; for(int i=0; iszd_zs(szd_zs+1)/2; i+) atpai=0.0;/赋初值 for(i=0; iszd_zs; i+) atpli=0.0;/赋初值for(int k=0; kgcz_zs; k+) int i=qsd_dhk;/获取点号int j=zd_dhk;/获取点号 double pk=pk;/获取权值 double lk=gczk(szd_gcjszd_gci);/获得第k个自由项 atpli-=pklk;/获得法方程自由项atplj+=pklk;atpaij(i,i)+=pk;/获得法方

9、程系数矩阵atpaij(j,j)+=pk;atpaij(i,j)=pk;/ 高程平差值计算void szwpc::ca_dx()for(int i=0;iyz_szd_zs;i+) atpaij(i,i)=1。0e30;/处理已知点if(!inverse(atpa,szd_zs)/矩阵求逆cerr”法方程系数矩阵降秩!endl;/矩阵为奇异矩阵,无法求逆exit(0);/退出程序for(i=0; iszd_zs; i+)/计算高程改正数double xi=0.0;for(int j=0; jszd_zs; j+)xi+=atpaij(i,j)*atplj;dxi=xi;szd_gci+=xi;

10、/计算高程平差值/ 残差计算double szwpc::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_gck2szd_gck1-gczi;pvv+=vivipi;return(pvv);/ 原始数据和平差值输出void szwpc::printresult(char resultfile)double pvv=ca_v(); / 残差计算ofstream outfile(resultfile,ios:out);/以输出方式打开文件,若文件不存在,创建文件/输出原始观测数据ou

11、tfileendl”观测总数:”gcz_zs ”总点数:szd_zs;outfile” 已知点数:”yz_szd_zsendl;outfileendl= 已知高程 =endl;/输出原始观测数据已知点点号、高程for(int i=0;i=yz_szd_zs-1;i+)outfile” dmi;outfilesetiosflags(ios::fixed);outfilesetw(10)setprecision(4)szd_gciendl;outfileendlendl”= 高差观测值=”endlendl;/输出原始观测数据高程观测值与路线长outfile起始点名 终点点名” ”高差观测值(m)

12、两点间距离(km)endl;for(i=0;i=gcz_zs-1;i+)outfile ”dmqsd_dhisetw(9)dmzd_dhi;outfilesetiosflags(ios::fixed);outfilesetw(16)setprecision(4)gczi;outfilesetiosflags(ios::fixed);outfilesetw(16)setprecision(4)1.0/piendl;m_mu=sqrt(pvv/(gcz_zs-(szd_zsyz_szd_zs)));/计算单位权中误差outfileendl= 单位权中误差=endl;/输出单位权中误差outfile

13、endl0=m_muendl;outfileendl”= 高程平差值及其精度 =endlendl;/输出高程平差值及其精度outfile”点名 近似高程 改正数 高程平差值 中误差endl;for( i=0; iszd_zs; i+) outfilesetw(2)dmi;double dx=dxi;double qii=atpaij(i,i);outfilesetiosflags(ios:fixed);outfilesetw(12)setprecision(4)szd_gcidx;outfilesetiosflags(ios:fixed);outfilesetw(10)setprecision

14、(4)dx;outfilesetiosflags(ios:fixed);outfilesetw(11)setprecision(4)szd_gci;outfilesetiosflags(ios:fixed);outfilesetw(10)setprecision(4)sqrt(qii)*m_muendl;/输出观测值平差值及其精度outfileendlendl”= 观测值平差值及其精度 =endlendl;outfile起 点 终 点 观测高差 ” 高差平差值 观测权 中误差”endl;for(i=0;i=gcz_zs-1;i+)int k1=qsd_dhi;int k2=zd_dhi;dou

15、ble qii=atpaij(k1,k1);double qjj= atpaij(k2,k2) ;double qij=atpaij(k1,k2);double ml=sqrt(qii+qjj-2.0qij)m_mu;outfile.width(2);outfiledmk1;outfile.width(7);outfiledmk2;outfilesetiosflags(ios::fixed);outfilesetw(12)setprecision(4)gczi;outfilesetiosflags(ios::fixed);outfilesetw(10)setprecision(4)vi;out

16、filesetiosflags(ios:fixed);outfilesetw(10)setprecision(4)gczi+vi;outfilesetiosflags(ios:fixed);outfilesetw(10)setprecision(4)pi;outfilesetiosflags(ios:fixed);outfilesetw(10)setprecision(4)mlendl;outfile。close();/ 水准网最小二乘平差void szwpc:zxecpc(char *resultfile)ca_h0(); /近似高程计算ca_atpa(); / 组成法方程ca_dx(); / 高程平差值计算/int main()char *datafile =算例data。txt”;/原始数据文件存储地址指针char resultfile =算

温馨提示

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

评论

0/150

提交评论