ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:18.04KB ,
资源ID:7573047      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7573047.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(水准网间接平差程序设计C++.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

水准网间接平差程序设计C++.docx

1、水准网间接平差程序设计C+/ 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; /pvv int *qsd_dh; /高差起点号 int *zd_dh; /高差终点号 char *dm;

2、 /点名地址数组 double *gcz; /观测值数组 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 *datafi

3、le);/输入原始数据函数 int dm_dh(char *name); /点名转点号 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:SZW

4、PC() if(gcz_zs0) delete qsd_dh; delete zd_dh; delete 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=

5、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-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:inputdat

6、a(char *datafile) ifstream infile(datafile,ios:in); if(! infile) cerr Open 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 do

7、uble gcz_zs; V=new double gcz_zs; P=new double gcz_zs; dm=new char* szd_zs; for(int i=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;/读取高程

8、终点 zd_dhi=dm_dh(buffer); infilegcziPi; /读取高差值与路线长度 Pi=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;/将待查点名与已经存入点名数组的点名比较,若存在返回点号 else int len = strlen(name);/判断点名长度 dmi = new charlen+1;/为点名申请存储空

9、间 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

10、_gck1+gczi;/计算近似高程 k+; else if(szd_gck1-10000.0)/k2点高程或高程近似值已知,k1点高程或高程近似值未知 szd_gck1=szd_gck2-gczi;/计算近似高程 k+; if(k=(szd_zs-yz_szd_zs)break;/所有的近似高程计算完成,退出 / 组成法方程void 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

11、=0; kgcz_zs; k+) int i=qsd_dhk;/获取点号 int j=zd_dhk;/获取点号 double Pk=Pk;/获取权值 double lk=gczk-(szd_gcj-szd_gci);/获得第k个自由项 ATPLi-=Pk*lk;/获得法方程自由项 ATPLj+=Pk*lk; ATPAij(i,i)+=Pk;/获得法方程系数矩阵 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(

12、!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;/计算高程平差值 / 残差计算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=

13、szd_gck2-szd_gck1-gczi; pvv+=Vi*Vi*Pi; return(pvv);/ 原始数据和平差值输出void SZWPC:printresult(char *resultfile) double pvv=ca_V(); / 残差计算 ofstream outfile(resultfile,ios:out);/以输出方式打开文件,若文件不存在,创建文件 /输出原始观测数据 outfileendl观测总数:gcz_zs 总点数:szd_zs; outfile 已知点数:yz_szd_zsendl; outfileendl= 已知高程 =endl;/输出原始观测数据已知点点

14、号、高程 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) 两点间距离(km)endl; for(i=0;i=gcz_zs-1;i+) outfile dmqsd_dhisetw(9)dmzd_dhi; outfilesetiosflags(ios:fixed)

15、; outfilesetw(16)setprecision(4)gczi; outfilesetiosflags(ios:fixed); outfilesetw(16)setprecision(4)1.0/Piendl; m_mu=sqrt(pvv/(gcz_zs-(szd_zs-yz_szd_zs);/计算单位权中误差 outfileendl= 单位权中误差=endl;/输出单位权中误差 outfileendl0=m_muendl; outfileendl= 高程平差值及其精度 =endlendl;/输出高程平差值及其精度 outfile点名 近似高程 改正数 高程平差值 中误差endl;

16、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_gci-dx; outfilesetiosflags(ios:fixed); outfilesetw(10)setprecision(4)dx; outfilesetiosflags(ios:fixed); outfilesetw(11)setprecision(4)szd_gci; outfileseti

17、osflags(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; double qii=ATPAij(k1,k1); double qjj= ATPAij(k2,k2) ; double qij=ATPAij(k1,k2); doub

18、le ml=sqrt(qii+qjj-2.0*qij)*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; outfilesetiosflags(ios:fixed); outfilesetw(10)setprecision(4)gczi+Vi; ou

19、tfilesetiosflags(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 =算例Result.txt;/平差结果输出地址指针 coutendlendl水准网经典间接平差endlendl; cout原数据文件位置:datafileendl; cout平差结果文件位置:resultfileendlendl; SZWPC new_net;/定义新的对象 new_net.inputdata(datafile);/输入原始数据 new_net.zxecpc(resultfile);/最小二乘平差计算 new_net.printresult(resultfile);/输出平差结果 return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1