误差理论与测量平差课程设计报告.docx
- 文档编号:28141628
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:32
- 大小:33.88KB
误差理论与测量平差课程设计报告.docx
《误差理论与测量平差课程设计报告.docx》由会员分享,可在线阅读,更多相关《误差理论与测量平差课程设计报告.docx(32页珍藏版)》请在冰豆网上搜索。
误差理论与测量平差课程设计报告
n
一、目录--————---—-—---—-——---------1
二、序言--—--——----————---—----——-——2
三、设计思路——-----——--—------——--—-3
四、程序流程图-—--—-—--—----—-—---—-4
五、程序及说明 —-—-—---—-----————----5
六、计算结果----—------—-—-—--——-—-12
七、总结——---—------——-—--—-—------15
第二部分序言
1、课程设计得性质、目得与任务
误差理论与测量平差就是一门理论与实践并重得课程,其课程设计就是测量数据处理理论学习得一个重要得实践环节,它就是在我们学习了专业基础课“误差理论与测量平差基础”课程后进行得一门实践课程、其目得就是增强我们对误差理论与测量平差基础理论得理解,牢固掌握测量平差得基本原理与基本公式,熟悉测量数据处理得基本技能与计算方法,灵活准确地应用于解决各类数据处理得实际问题,并能用所学得计算机理论知识,编制简单得计算程序、
2、误差理论与测量平差课程与其它课程得联系与分工
这次课程设计中所用得数学模型与计算方法就是我们在误差理论与测量平差课程中所学得内容,所使用得C程序语言使我们在计算机基础课程中所学知识。
误差理论与测量平差课程设计就是测量平差与计算机程序设计等课程得综合实践与应用,同时也为我们今后步入工作岗位打下了一定基础。
3、课程设计重点及内容
本次课程设计重点就是培养我们正确应用公式、综合分析与解决问题得能力,以及计算机编程能力、另外它要求我们完成1-2个综合性得结合生产实践得题目。
如目前生产实践中经常用到得水准网严密平差及精度评定,边角网(导线)严密平差及精度评定等、此次我所选得课程设计课题就是水准网严密平差及精度评定,其具体内容如下:
根据题目要求,正确应用平差模型列出观测值条件方程、误差方程与法方程;解算法方程,得出平差后得平差值及各待定点得高程平差值;评定各平差值得精度与各高程平差值得精度。
具体算例为:
如图所示水准网,有2个已知点,3个未知点,7个测段。
各已知数据及观测值见下表
(1)已知点高程H1=5。
016m,H2=6、016m (2)高差观测值(m)
端点号
高差观测值m
测段距离km
序号
1—3
1、359
1、1
1
1—4
2、009
1、7
2
2-3
0、363
2。
3
3
2-4
1.012
2.7
4
3-4
0。
657
2。
4
5
3-5
0、238
1、4
6
5—2
—0、595
2。
6
7
(3)求各待定点得高程;3-4点得高差中误差;3号点、4号点得高程中误差。
第三部分 设计思路
一、解题步骤
(1)此次设计我所采用得模型为间接平差模型,根据已知条件我们可知观测总数n=7,必要观测数t=3(则多余观测数r=n—t=4),因此我需先选定三个参数,即3、4、5点得最或然高程X3、X4、X5(X=X0+x,X30=6。
375、X40=7、025、X50=6、611;其中X0为参数得近似值,x为其改正值)为参数。
(2)列出条件方程,即将每一个观测量得平差值分别表达成所选参数得函数,H1+h1=X3、H1+h2=X4、H2+h3=X3、H2+h4=X4、X3+h5=X4、X3+h6=X5、X5+h7=H2;整理后得出误差方程,v1=x3、v2=x4、v3=x3-4、v4=x4-3、v5=-x3+x4-7、v6=—x3+x5-2、v7=—x5,即v=Bx-l得形式。
(3)定权,令每千米得观测高差为单位权观测,即Pi=1/Si,从而可写出权阵P;根据误差方程式又可得其系数矩阵B与自由项l,并由它们组成法方程NBBx-W=0(其中NBB=BTPB,W=BTPl),法方程得个数等于所选参数得个数、
(4)解算法方程,求出参数改正值x并计算参数得平差值X=X0+x。
(5)由误差方程计算V,并求出观测量得平差值。
为了检查平差计算得正确性,将所求得值代入条件方程,瞧其就是否满足方程。
(6)精度评定,计算单位权中误差,按照题设要求列出权函数式,再根据平差参数得协方差阵求出协因数,最后求出某段高差中误差,某些点得高程中误差、
二、程序设计思想
考虑到在解题过程中一些计算得复杂性,我们需借助一些技术将计算简单化,快捷化,因此在课程设计过程中,我们把一些C语言程序设计引入其中;通过一些简单、明了得程序及子函数调用,我们就可以很方便快捷得求出用笔算比较繁琐、费时得矩阵乘积、矩阵得逆(如BTPB、BTPl)等运算、
第四部分 程序流程图
根据题目列出条件方程并写成误差方程得形式V=Bx-l
↓
确定权阵,根据误差方程得到矩阵B、l进而写出BT
↓
运用C程序语言求出BTP,进一步得到NBB=BTPB、W=BTPl并求出NBB—1
↓
用C程序求出参数得改正数x=NBB—1W
↓
根据C程序语言求Bx,进而由V=Bx—l写出各观测值得改正数
↓
根据L=L+V求出各观测值得平差值
↓
检验所求各值就是否正确,若无误则往下进行,反之检查各步骤查出错误并改正
↓
由程序计算VTP进而求出VTPV,求单位权中误差,再根据权函数式、协因数传播定律评定各观测值及所求高程得精度
第五部分程序及说明
一、矩阵相乘计算函数
#include“stdio。
h”
voidMatrix(a,b,m,n,k,c)
intm,n,k;
doublea[],b[],c[];
{
inti,j,l,u;
for(i=0;i<=m-1;i++)
for(j=0;j<=k-1;j++)
{
u=i*k+j;c[u]=0。
0;
for(l=0;l〈=n-1;l++)
c[u]=c[u]+a[i*n+l]*b[l*k+j];
}
return;
}
1.计算BTP
main()
{
inti,j;
static double a[3][7]=BT;
staticdoublec[3][7],b[7][7]=P;
Matrixmul(a,b,3,7,7,c);
printf(“\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=6;j++)
printf(“%8、4f\t”,c[i][j];
printf(“\n”);
}
printf(“\n");
return0;
}
2。
计算BTPB,即NBB
main()
{
int i,j;
staticdoublea[3][7]=BTP;
staticdouble c[3][3],b[7][3]=B;
Matrixmul(a,b,3,7,3,c);
printf(“\n");
for(i=0;i<=2;i++)
{
for(j=0;j〈=2;j++)
printf(“%8。
4f\t”,c[i][j];
printf(“\n”);
}
printf(“\n”);
return0;
}
3。
计算BTPl,即W
main()
{
inti,j;
staticdoublea[3][7]=BTP;
staticdoublec[3][1],b[7][1]=l;
Matrixmul(a,b,3,7,1,c);
printf(“\n”);
for(i=0;i〈=2;i++)
{
for(j=0;j<=0;j++)
printf(“%8。
4f\t”,c[i][j];
printf(“\n”);
}
printf(“\n”);
return0;
}
二、矩阵得逆计算函数(求NBB-1)
#include”stdio。
h"
#define M3
voidmain()
{
floatMAT[M][2*M];
floatMAT1[M][M];
float t;
inti,j,k,l;
/***********************************************/
/*对矩阵进行初始化*/
for(i=0;i〈M;i++)
for(j=0;j<2*M;j++)
MAT1[j]=’\0’;
/*对MAT1矩阵赋初值*/
for(i=0;i〈M;i++)
for (j=0;j scanf("%f",&MAT1[j]); /*打印目标矩阵? */ printf(”原矩阵为: \n”); for(i=0;i〈M;i++) { for(j=0;j printf("%13、7f",MAT1[j]); printf("\n"); }/********************************************/ /*对MAT1矩阵进行扩展,MAT1矩阵添加单位阵,由M*M变成2M*2M矩阵*/ for(i=0;i for(j=0;j<2*M;j++) if(j<M) MAT[j]=MAT1[j]; else if(j==M+i) MAT[j]=1; elseMAT[j]=0; /*对M矩阵进行变换,使得前半部分矩阵成为单位阵,则 */ /*后半部分矩阵即为所求矩阵逆阵*/ for(i=0;i〈M;i++) { /*对第i行进行归一化*/ for(j=0;j<2*M;j++) for(k=i+1;k〈M;k++) MAT[j]=MAT[j]+MAT[k][j]; t=MAT; for(j=i;j<2*M;j++) MAT[j]=MAT[j]/t; /*对矩阵进行行变换,使得第i 列只有一个元素不为零,且为1*/ for(k=0;k if(k! =i) { t=MAT[k]; for (l=i;l<2*M;l++) MAT[k][l]=MAT[k][l]—MAT[l]*t; } } /*将后半部分矩阵即所求矩阵逆阵存入MAT2矩阵。 */ for(i=0;i〈M;i++) { for(j=0;j〈M;j++) MAT1[j]=MAT[j+M]; printf("\n"); } /*********************************************/ /*输出所求得逆阵*/ printf(”逆阵为: \n"); for(i=0;i<M;i++) { for(j=0;j printf("%8、4f”,MAT1[j]); printf(”\n"); } } 4、求NBB—1W,即改正数x main() { inti,j; staticdoublea[3][3]=NBB—1; staticdoublec[3][1],b[3][1]=W; Matrixmul(a,b,3,3,1,c); printf(“\n"); for(i=0;i〈=2;i++) { for(j=0;j<=0;j++) printf(“%8、4f\t”,c[i][j]; printf(“\n"); } printf(“\n”); return0; } 5.计算Bx main() { inti,j; staticdoublea[7][3]=B; staticdoublec[7][1],b[3][1]=x; Matrixmul(a,b,7,3,1,c); printf(“\n"); for(i=0;i〈=6;i++) { for(j=0;j<=0;j++) printf(“%8、4f\t",c[i][j]; printf(“\n"); } printf(“\n”); return0; } 6.计算VTP main() { inti,j; staticdoublea[1][7]=VT; staticdouble c[1][7],b[7][7]=P; Matrixmul(a,b,1,7,7,c); printf(“\n”); for(i=0;i<=0;i++) { for(j=0;j<=6;j++) printf(“%8、4f\t",c[i][j]; printf(“\n”); } printf(“\n"); return0; } 7。 计算VTPV main() { inti,j; static double a[1][7]=VTP; staticdoublec[1][1],b[7][1]=V; Matrixmul(a,b,1,7,1,c); printf(“\n”); for(i=0;i<=0;i++) { for(j=0;j〈=0;j++) printf(“%8。 4f\t”,c[i][j]; printf(“\n"); } printf(“\n”); return0; 注: 程序中有下划线部分在C语言环境中运行时,需根据已知条件及所求结果进行替换! 第六部分计算结果 根据条件方程及定权原则写出B、l、P及BT B={{1、0,0、0,0。 0}, {0。 0,1。 0,0.0}, {1.0,0.0,0、0}, {0、0,1、0,0。 0}, {—1。 0,1.0,0、0}, {—1。 0,0、0,1。 0}, {0.0,0.0,-1。 0}} l={{0、0}, {0.0}, {4。 0}, {3。 0}, {7。 0}, {2、0}, {0、0}} P={{0、9091,0、0,0、0,0.0,0、0,0、0,0。 0}, {0、0,0。 5882,0。 0,0。 0,0.0,0.0,0。 0}, {0。 0,0、0,0.4348,0。 0,0。 0,0、0,0.0}, {0。 0,0、0,0、0,0、3704,0、0,0。 0,0。 0}, {0。 0,0、0,0、0,0。 0,0、4167,0、0,0.0}, {0、0,0、0,0。 0,0、0,0。 0,0、7143,0、0}, {0。 0,0.0,0。 0,0、0,0。 0,0。 0,0、3846}} BT={{1、0,0.0,1.0,0。 0,-1、0,-1、0,0。 0}, {0、0,1.0,0。 0,1。 0,1.0,0.0,0.0}, {0、0,0。 0,0、0,0。 0,0.0,1。 0,-1.0}} 一、在矩阵相乘计算函数得程序前提下,进行以下子程序得调用 1.替换第1个程序中得BT、P并运行程序得到BTP BTP={{0.9091,0。 0,0。 4348,0。 0,—0。 4167,—0.7143,0。 0}, {0、0,0.5882,0、0,0.374,0、4167,0.0,0.0}, {0。 0,0。 0,0.0,0。 0,0、0,0。 7143,—0、3846}} 2、替换第2个程序中得BTP、B并运行程序得到BTPB,即NBB NBB={{2。 4748,—0.4167,-0.7143}, {-0、4167,1。 3753,0。 0}, {-0。 7143,0.0,1.0989}} 3、替换第3个程序中得BTP、l并运行程序得到BTPl,即W W={{—2.6063}, {4、0281}, {1、4286}} 二、在矩阵得逆计算函数程序中进行以下操作 运行程序,按照提示及以上运算得到得矩阵NBB输入其元素,运行得结果即为NBB-1NBB-1={{0。 5307,0、1608,0、3450}, {0.1608,0、7758,0、1045}, {0、3450,0。 1045,1。 1342}} 三、再次在矩阵相乘计算函数得程序前提下,进行以下子程序得调用 1.替换第4个程序中得NBB-1、W并运行程序得到NBB—1W,即所选参数得改正数x x={{-0、2426}, {2。 8552}, {1.1421}} 2、替换第5个程序中得B、x并运行程序得到Bx Bx={{-0。 2426}, {2、8552}, {-0.2464}, {2。 8552}, {3.0978}, {1、3847}, {-1。 1421}} 3、根据V=Bx-l求出各观测值得改正数V,并写出VT,然后替换第6个程序中得VT、P并运行程序得到VTP V={{-0、2426}, {2、8552}, {-4、2426}, {-0、1448}, {-3。 9022}, {—0。 6153}, {—1。 1421}} VT={{-0、2426,2。 8552,-4、2426,—0。 1448,-3。 9022,-0、6153,-1、1421}} VTP={{-0、2205,1。 6794,-1.8447,—0、0536,1.6260,-0。 4395,-0。 4393}} 4、替换第7个程序中得VTP、V并运行程序得到VTPV VTPV=19。 7997 四、求出各个观测值平差值并按要求平定精度 X3=6。 3748m X4=7.0279 mX5=6.6122 m h1=1、3588mh2=2。 0119mh3=0、3588mh4=1.0119mh5=0.6531m h6=0、2374mh7=—0.5961m 根据公式可求得单位权中误差为2。 225mm h34= X3— X4 Q34=[1 —1 0]NBB-1[1—10]T=0、9849 H3=X3Q34=[1 00]NBB—1[100]T=0、5307 H4=X4Q34=[010]NBB-1[0 10]T=0、7758 3、4点高差中误差为2.208mm 3号点高程中误差为 1.621mm 4号点高程中误差为1、96mm 第七部分总结 通过这次误差理论与测量平差得课程设计,我又对整本书有了一个更深得理解、其实课程设计就就是将我们所学得理论知识应用于实践得过程,在这一过程中,进一步掌握测量平差得基本原理与基本公式,并熟悉测量数据处理得基本技能与计算方法。 或许我们已对《误差理论与测量平差》这本书得理论知识有了一定了解,但将它应用于实践依然就是我们得一个难点,尤其就是将这门课程与计算机程序完美地结合、这便要求我们在原有得解题思路中加入C语言程序,并让它来帮助我们解决矩阵得复杂运算。 既然用到了程序,我们就必须保证其运算得简洁性、正确性,尤其就是在编写过程中要认真检查,为程序顺利运行打下基础。 另外在各个子程序调用过程中,我们要充分考虑其顺序性并反复调试,以便得到理想结果。 尽管在这次课程设计中遇到了很多困难,但我却得到了不少收获,并培养了自己正确应用公式、综合分析与解决问题得能力,同时也为今后步入社会打下了一定得基础。 另外,我们还要学会综合利用自身所学得知识,并将它们联系起来帮助自己有效地解决实际中得问题。 总之,在这次课程设计中我不但过了比较充实得一周,还收获了不少知识、 #include #include〈fstream> #include h〉 #include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 误差 理论 测量 课程设计 报告