水准网间接平差程序设计c++

上传人:sh****d 文档编号:108395644 上传时间:2019-10-23 格式:DOC 页数:10 大小:36.01KB
返回 下载 相关 举报
水准网间接平差程序设计c++_第1页
第1页 / 共10页
水准网间接平差程序设计c++_第2页
第2页 / 共10页
水准网间接平差程序设计c++_第3页
第3页 / 共10页
水准网间接平差程序设计c++_第4页
第4页 / 共10页
水准网间接平差程序设计c++_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《水准网间接平差程序设计c++》由会员分享,可在线阅读,更多相关《水准网间接平差程序设计c++(10页珍藏版)》请在金锄头文库上搜索。

1、/ visual C+6.0 编译通过 / 参考资料 / 部分网络资料 / 宋力杰测量平差程序设计 /姚连壁基于matlab的控制网平差程序设计 / /#include#include#include #include#include using namespace std;/classclass SZWPCprivate:int gcz_zs; /高差总数int szd_zs; /总点数int yz_szd_zs; /已知点数double m_pvv; /pvvint *qsd_dh; /高差起点号int *zd_dh; /高差终点号char *dm; /点名地址数组double *gcz;

2、 /观测值数组double *szd_gc; /高程值数组double *P; /观测值的权double *ATPA,*ATPL; /法方程系数矩阵与自由项double *dX; /高程改正数、平差值double *V; /残差double m_mu; /单位权中误差public:SZWPC();SZWPC();int ij(int i,int j);/对称矩阵下标计算函数bool inverse(double a,int n);/对称正定矩阵求逆(仅存下三角元素)(参考他人)void inputdata(char *datafile);/输入原始数据函数int dm_dh(char *nam

3、e); /点名转点号void ca_H0(); /近似高程计算函数void ca_ATPA(); /法方程组成函数void ca_dX(); /高程平差值计算函数void printresult(char *resultfile); /精度估计与平差值输出函数double ca_V(); /残差计算函数 void zxecpc(char *resultfile);/最小二乘平差函数;/ 构造函数SZWPC:SZWPC()gcz_zs=0;szd_zs=0;yz_szd_zs=0;/ 析构函数SZWPC:SZWPC()if(gcz_zs0)delete qsd_dh;delete zd_dh;d

4、elete gcz;delete P;delete V;if(szd_zs0)delete szd_gc;delete ATPA;delete ATPL;delete dX;for(int i=0; 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;kn;k+)double a00=a0;if(a00+1.0=1.0)delete a0;return false;for(int i=1;in;

5、i+)double ai0 = ai*(i+1)/2;if(i=n-k-1)a0i= -ai0/a00;else a0i= 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;in;i+)a(n-1)*n/2+i-1=a0i;an*(n+1)/2-1=1.0/a00;delete a0;return true;/ 原始数据输入函数void SZWPC:inputdata(char *datafile)ifstream infile(datafile,ios:in);if(! infile)cerr Ope

6、n error!gcz_zsszd_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_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

7、=0;iszd_zs;i+)dmi = NULL;/ dm_dh函数根据dmi是否为NULL确定dmi是否为点名地址char buffer128; /临时数组,保存从文件中读到的点名for( i=0;ibuffer;int c=dm_dh(buffer);infileszd_gci;for(i=0;ibuffer; /读取高程起点名qsd_dhi=dm_dh(buffer);infilebuffer;/读取高程终点zd_dhi=dm_dh(buffer);infilegcziPi; /读取高差值与路线长度Pi=1.0/Pi;/线路长转化为观测值的权infile.close();/ 点名转点号,

8、返回点名对应的点号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;/返回点号return -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;i-10000.0 & szd_gck2-10000.0)/k1点高程或高程近似值已知,k2点高程或高程近似值未知szd_gck2=szd_gck1+gczi;/计算近似高程k+;elseif(szd_gck1-10000.0)/k2点高程或高程近似值已知,k1点高程或高程近似值未知

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号