误差理论与测量平差上机指导书讲解_第1页
误差理论与测量平差上机指导书讲解_第2页
误差理论与测量平差上机指导书讲解_第3页
误差理论与测量平差上机指导书讲解_第4页
误差理论与测量平差上机指导书讲解_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、误差理论与测量平差上机指导书辽宁工程技术大学测绘与地理科学学院测绘工程系误差理论与测量平差上机指导书目录实验 1 矩阵加法与乘法运算 1实验 2 矩阵转置与求逆运算 3实验 3 误差椭圆元素计算 11实验 4 水准网间接平差程序设计 12误差理论与测量平差上机指导书实验 1 矩阵加法与乘法运算一、实验名称:矩阵加法与乘法运算。二、实验目的和任务:掌握矩阵加法与乘法通用程序的编写。三、实验要求:1 每人独立编写出矩阵加法与乘法的程序,并上机调试通过;2 采用 VC+6.0 开发平台, C 或者 C+ 语言编写程序;3 写出矩阵运算的结果。四、实验内容:1 矩阵加法的示例函数 (C 语言 )voi

2、d JZjiafa(double a1515,double b1515,double c1515,int m,int n)for (int i=0;i=m-1;i+)for(int j=0;j=n-1;j+) cij=aij+bij;return;2 矩阵乘法的示例程序 (C 语言 )#include stdafx.hvoid matrixMultiply(double a1415,double b1513, double c1413,long m,long n,long k)for (long i = 0; i= m-1; i+)for (long j=0; j=k-1; j+) 误差理论与

3、测量平差上机指导书cij =0.0;for (long q=0; q=n-1;q+)cij = cij + aiq * bqj;return;int main(int argc, char* argv)long n,m,k,i,j;double a1415,c1413,b1513;FILE *stream; stream = fopen(矩阵输入 .txt,r); fscanf(stream,%ld %ld,&n,&m);for (i=0;in;i+)for(j=0;jm;j+)fscanf(stream,%lf,&aij);fscanf(stream,%ld %ld,&m,&k);for(i

4、=0;im;i+)for(j=0;jk;j+)fscanf(stream,%lf,&bij);fclose(stream);误差理论与测量平差上机指导书matrixMultiply(a,b,c,4,5,3);stream = fopen(矩阵计算结果 .txt,w);for (i=0;i=3;i+)for(j=0;j=2;j+)fprintf(stream,%16.7e ,cij); fprintf(stream,n);fprintf(stream,n);fclose(stream);return 0;实验 2 矩阵转置与求逆运算一、实验名称:矩阵转置与求逆运算。二、实验目的和任务:掌握矩阵转

5、置的编写,会调用矩阵求逆函数。三、实验要求:1 每人独立编写出矩阵转置的程序,并上机调试通过;2 每人独立完成矩阵求逆函数的调用,并调试通过;3 采用 VC+6.0 开发平台, C 或者 C+ 语言编写程序;4 写出矩阵运算的结果。四、实验内容:i. 矩阵的转置示例函数 (C 语言 )double JZzhuanzhi(double a1515, double b1515, int m,int n) 误差理论与测量平差上机指导书for(int i=0;im;i+)for(int j=0;jn;j+) bji=aij;return 0.0;ii. 矩阵求逆的示例函数 (C 语言 )int inv

6、GJ(double *a,int n)int *is,*js,i,j,k,l,u,v;double d,p;is=(int *)malloc(n*sizeof(int);js=(int *)malloc(n*sizeof(int);for(k=0;k=n-1;k+)d=0.0;for(i=k;i=n-1;i+)for(j=k;jd)d=p;isk=i;jsk=j;if(d+1.0=1.0)free(is);free(js);printf(error not invn);return (0);if(isk!=k)for(j=0;j=n-1;j+)u=k*n+j;v=isk*n+j;误差理论与测量

7、平差上机指导书p=akj;akj=aiskj;aiskj=p; if(jsk!=k) for(i=0;i=n-1;i+) u=i*n+k;v=i*n+jsk; p=aik;aik=aijsk;aijsk=p; l=k*n+k; akk=1.0/akk; for(j=0;j=n-1;j+) if(j!=k)u=k*n+j;akj=akj*akk; for(i=0;i=n-1;i+) if(i!=k) for(j=0;j=n-1;j+) if(j!=k) u=i*n+j; aij=aij-aik*akj; for(i=0;i=0;k-) if(jsk!=k)误差理论与测量平差上机指导书for(j=

8、0;j=n-1;j+)u=k*n+j;v=jsk*n+j; p=akj;akj=ajskj;ajskj=p;if(isk!=k)for(i=0;i=n-1;i+)u=i*n+k;v=i*n+isk; p=aik;aik=aiisk;aiisk=p;free(is);free(js);return (1); int invGJ(double *a,int n)int *is,*js,i,j,k,l,u,v;double d,p;is=(int *)malloc(n*sizeof(int);js=(int *)malloc(n*sizeof(int);for(k=0;k=n-1;k+)d=0.0;

9、for(i=k;i=n-1;i+)for(j=k;jd)d=p;isk=i;jsk=j;if(d+1.0=1.0)free(is);free(js);printf(error not invn);误差理论与测量平差上机指导书return (0); if(isk!=k)for(j=0;j=n-1;j+) u=k*n+j;v=isk*n+j; p=akj;akj=aiskj;aiskj=p;if(jsk!=k) for(i=0;i=n-1;i+) u=i*n+k;v=i*n+jsk; p=aik;aik=aijsk;aijsk=p; l=k*n+k; akk=1.0/akk; for(j=0;j=

10、n-1;j+) if(j!=k)u=k*n+j;akj=akj*akk; for(i=0;i=n-1;i+) if(i!=k) for(j=0;j=n-1;j+) if(j!=k) u=i*n+j; aij=aij-aik*akj; for(i=0;i=0;k-)if(jsk!=k)for(j=0;j=n-1;j+) u=k*n+j;v=jsk*n+j; p=akj;akj=ajskj;ajskj=p;if(isk!=k)for(i=0;i=n-1;i+)u=i*n+k;v=i*n+isk;p=aik;aik=aiisk;aiisk=p;free(is);free(js);return (1)

11、;iii. 矩阵求逆函数的调用 (C 语言 )#include #include #include int invGJ(double *a,int n);void main()int i,j;double *AA;8误差理论与测量平差上机指导书/首先对二维指针 Naa分配内存,采用 C 语言的方法/* AA=(double *)malloc(sizeof(double)*2);for(i=0;i2;i+)AAi=(double *)mallo(sizeof(double)*2);*/首先对二维指针 Naa 分配内存,采用 C+语言的方法AA=new double * 2;for(i=0;i2;

12、i+)AAi=new double2;double BB22=1,2,3,4;for(i=0;i2;i+)for(j=0;j2;j+)AAij=BBij;/调用矩阵求逆函数invGJ(AA,2);printf( 矩阵 AA 的逆阵如下 n);for(i=0;i2;i+)for(j=0;j2;j+)printf(%10.4lf,AAij);printf(n);误差理论与测量平差上机指导书double CC22;printf(AA 与其逆阵的乘积如下 (理论上是单位阵 )n);for(i=0;i2;i+)for(j=0;j2;j+)CCij=0.0;for(int k=0;k2;k+)CCij+=

13、AAik*BBkj;printf(%10.4lf,CCij);printf(n);/C 语言释放 AA 二维指针的方法/* for(i=0;i2;i+)free(AAi);free(AA);*/C+ 语言释放 AA 二维指针的方法for(i=0;im_pMainWnd-MessageBox( 数据文件不存在或数据文件错 !, 进程. . . . . .!,MB_OK|MB_ICONSTOP);_exit(1);return FALSE;fp.ReadString(buff,MAXLINE);sscanf(buff,%d%d%d,&nz,&nw,&nn);ne=nz-nw;int dh;doub

14、le gc;for(i=0;inz;i+)15误差理论与测量平差上机指导书fp.ReadString(buff,MAXLINE);sscanf(buff,%d%s%lf,&dh,ch1,&gc);dmi=ch1;Hi=gc;for(i=0;inn;i+)fp.ReadString(buff,MAXLINE);sscanf(buff,%d%d%lf%lf,&n1i,&n2i,&hi,&Si);fp.Close();return TRUE;void CGckzwpc:pc()int i,j,k;/ double Nbb12020;Nbb = new double * nw;for(i=0;inw;

15、i+)Nbbi = new double nw;for(i=0;inn;i+)Pi=0.0;li=0.0;for(j=0;jnw;j+)Bij=0.0;for(i=0;ine) Bin1i-ne-1=-1;if(n2ine) Bin2i-ne-1=+1;Pi=1/Si;16误差理论与测量平差上机指导书li=Hn1i-1+hi-Hn2i-1; for(i=0;inw;i+)for(j=0;jnw;j+)Nbbij=0.0; for(k=0;knn;k+) Nbbij+=Bki*Bkj*Pk; for(i=0;inw;i+)Wi=0.0;for(k=0;knn;k+)Wi+=Bki*Pk*lk;

16、invGJ(Nbb,nw);for(i=0;inw;i+)Xi=0.0;for(k=0;knw;k+)Xi+=Nbbik*Wk;17误差理论与测量平差上机指导书/精度评定函数void CGckzwpc:jdpd()int i,j,k;FILE *fp; fp=fopen(out.txt,w);VPV =0.0; for(i=0;inn;i+) Vi=0.0; for(k=0;knw;k+) Vi+=Bik*Xk;Vi+=-li; VPV+=Vi*Vi*Pi; phi=hi+Vi; /计算验后单位权中误差 SIG0=sqrt(VPV/(nn-nw); /计算未知参数的方差 for(i=0;inw

17、;i+) for(j=0;jnw;j+) DXij=SIG0*SIG0*Nbbij;double QLL5050,SIGL5050;QLL=B*inv(Nbb)*BT/ 计 算 观 测 值 的 平 差 值 的 中 误 差 DLL=SIG0*SIG0*QLLfor(i=0;inn;i+)18误差理论与测量平差上机指导书for(j=0;jnn;j+)QLLij =0.0;SIGLij=0.0;for(k=0;knw;k+)for(int m=0;mnw;m+)QLLij+=Nbbkm*Bik*Bjm;SIGLij=SIG0*sqrt(QLLij);fprintf(fp,* 水准网间接平差结果 *n

18、n);fprintf(fp, 总点数 %3d 未知点数 %3d 测段数 %3dn, nz,nw,nn);fprintf(fp,n 验后单位权中误差 %6.2lf(mm)nn,SIG0*1000);fprintf(fp,n 起点号 终点号 观测高差 (m) 路线长 (km) 改正 数(mm) 平差高差 (m) 中误差 (mm)n);for(i=0;inn;i+)fprintf(fp, %3d %3d %8.4lf %8.4lf %8.2lf %8.4 lf %8.2lfn,n1i,n2i,hi,Si,Vi*1000,phi,SIGLii*1000);fprintf(fp,nn 已知点 已知高程

19、(m)n); for(i=0;ine;i+)fprintf(fp,%10s %10.4lf n,dmi,Hi);19误差理论与测量平差上机指导书fprintf(fp,n 待定点 平差高程 (m) 高程中误差 (mm)n); for(i=0;inw;i+)fprintf(fp, %10s %10.4lf %5.2lfn, dmi+ne,Xi,sqrt(DXii)*1000);for(i=0;inw;i+)delete Nbbi;delete Nbb;fclose(fp);/ 菜单驱动打开文件源代码(放在 View 中)void CSurveyView:OnMenuGcwpc()CGckzwpc m_pc;CFileDialogFileDlg(TRUE,NULL,*.txt,OFN_HIDEREADONLY|OFN_OVERWRITE PROMPT, 水准网平差数据文件名 (*.txt)|*.txt| 所有文件 (*.*)|*.*|);FileDlg.m_ofn.lpstrTitle= 打开平差数据文件 ; if(FileDlg.DoModal()=IDOK)CString StrFile=FileDlg.GetPathName(); m_pc.ReadData(StrFile); m_pc.pc();m_pc.jdpd();AfxMe

温馨提示

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

评论

0/150

提交评论