测量平差实习报告.docx
《测量平差实习报告.docx》由会员分享,可在线阅读,更多相关《测量平差实习报告.docx(26页珍藏版)》请在冰豆网上搜索。
![测量平差实习报告.docx](https://file1.bdocx.com/fileroot1/2022-10/28/527e0b22-6fc8-4870-b8e5-c62744dd0ba6/527e0b22-6fc8-4870-b8e5-c62744dd0ba61.gif)
测量平差实习报告
课程编号:
课程性质:
选修
平差实习
学院:
测绘学院
专业:
测绘工程
班级:
2011级03班
学号:
2011301610***
姓名:
******
指导教师:
*******
一、题目内容
第一题:
图1为一水准网,A、B、C为已知高程点,P1~P9为9个待定高程点,第一次观测了图中1~15条水准路线的高差,各水准路线的观测高差、距离及已知点高程均列于表4,试求
(1)1公里高差平差值中误差;
(2)各待定点高程平差值及中误差;
如果准备加测5段高差16~20(图中用虚线表示),(3)试估算平差后各待定点的精度;(4)精度最弱的点发生改变没有;(5)哪一点精度提高得最多。
图1
表1水准网观测数据
线路号
观测高差(m)
距离(km)
线路号
观测高差(m)
距离(km)
1
1.4957
0.4
11
2.0416
0.8
2
1.7892
0.5
12
1.5355
0.7
3
5.2062
0.7
13
1.7450
0.8
4
2.0853
0.9
14
2.7434
0.4
5
3.4175
0.4
15
1.3785
0.5
6
1.2080
1.0
16
0.6
7
6.0373
0.6
17
0.6
8
4.3307
0.6
18
1.8
9
3.6510
0.6
19
0.8
10
2.5120
0.3
20
1.2
已知点高程:
、、、
第二题:
见平差辅助软件
2、函数模型
第一题:
本题采用间接平差模型即,误差方程为。
第二题:
本题采用间接平差模型即,误差方程为。
3、计算框图、程序说明及源程序
1、计算框图:
2、程序说明
这两个程序由matlab写成。
第一题
可以适用于任何闭合水准平差,先要把数据写进一个txt文件,格式为:
已知点个数未知点数观测值个数增加观测值个数
已知点点号已知点高程
起点点号终点点号高程距离
…
…
注意已知点点号变为数字,按字母顺序接在未知点点号之后。
然后运行程序,程序会弹出一个窗口,选择刚刚写的txt文件,程序就可算出1公里高程平差值中误差(q0),各待定点高程平差值及中误差,以及加测5段高差后各待定点精度,精度最弱点的点号,各待定点精度的变化。
1水准网数据结构的设计水准网根据其网形可分为附合、闭合和支水准。
其中应用最广的为附合和闭合水准网。
不管何种网形,一条水准路线包括四个数据:
起始点、高差、距离、终点,且H起+h高差=H终,因此在进行数据结构的设计中,必须体现出终点、起点从而判断其与高差关系。
在本程序设计中,利用qd[],zd[],h[],jl[],分别表示起点点号、终点点号、高差、距离所组成的矩阵。
2.1水准网所有点高程确定
在水准网间接平差计算过程中,按照已知点的个数确定参数个数,有已知点时,参数个数等于未知点个数,没有已知点时参数个数等于未知点个数减1,但是在进行方程列立时,为了计算方便首先要求得参数X的近似值,但是对于用程序实现其自动求取近似值比较麻烦,为了Matlab实现运算简单,因此在本程序中,所有未知点的高程起始值均为0,通过以下代码实现。
HHH=HH;%HH为读取文件中已知点高程矩阵,HHH为未知点高程%zd总点数,wz未知点数,
fori=1:
b
HHH(zd-wz+i)=0;%给未知高程点添加高程零生成HHH,b为未知点个数
2.2水准网误差方程系数矩阵生成
对于水准网间接平差而言,最重要的计算步骤不外乎误差方程的列立,而对于程序设计重点和难点就是自动生成误差方程系数矩阵B和常数项L。
在本程序的设计过程中,利用起始点、终点、高差。
距离之间的对应关系,利用循环计算常数项L,由于水准网比较特殊,系数阵B也特殊基本上是0、1、-1组成的矩阵,根据这一特点利用对应关系确定其系数阵B。
%qd,zd存放的是与各边相对应的点的点号,通过自定义函数实现,方便确定B与L。
fori=1:
s
e=qh(i);
f=zh(i);
L(i)=h(i)-(HHH(f)-HHH(e));
end
L=L';
%常数项L
fori=1:
s
e=qh(i);
f=zh(i);
if(e<=wd)
B(i,e)=-1;
end
if(f<=wd)
B(i,f)=1;
end
end
2.3水准网平差计算与结果输出
1)对于水准网平差计算,相对Matlab而言。
仅需几行代码可以实现
P=diag(1./s);%解权阵
x=inv(B’*P*B)*(B’*P*l);%高程改正数x,B系数阵,l为常数项阵
v=B*x-l;%观测值改正数
q0=sqrt(v’*P*v/(s-wd));
Qxx=inv(B’*p*B);
q=q0*sqrt(diag(Qxx));%待定点高程平差值中误差
第二题
也适用于任何已知数据为已知点坐标(其中有两个已知点相邻)的闭合导线网平差,把题目软件输出的观测值表用word处理一下,删掉汉字,前面加上几个数据,分别是边观测值个数,角观测值个数,已知点个数,点总个数,去掉角度编号前面的角标志和后面角度值的度分秒标志,在文本的末尾加上已知点点号和已知点坐标。
另外,要把所有0点号改成最大点号再加上1。
程序先计算各个待定点坐标的估计值。
由观测角出发,按观测顺序检索,若第i个角的末点的坐标未知,则判断起点和中点坐标是否已知,若已知,则根据这两个点的坐标算出后视方向方位角,再结合前视方向边长观测值(根据点号给每个角的两条边按边长观测矩阵顺序编个号,方便引用)及第i个观测角的大小,推算出末点的坐标。
再用同样的方法算出未知起点的坐标。
然后跳到下一个角进行计算,如此完成一遍计算,制作一个循环,重复刚才的运算直到所有未知点的坐标都估算出来。
然后程序根据刚算出的未知点坐标估计值和已知点坐标算出所有边和角的估算值(边和角的各个点可由点号矩阵检索到,然后再结合标矩阵得到各个坐标),以此为基础,计算系数矩阵B。
先默认B为0,再针对每个角,结合导线网间接平差的误差方程,求出每个观测值改正数用参数式时参数前面的系数,然后组成B矩阵。
因为对于某些观测边来说,它们的端点为已知点,已知点的坐标不是参数,因此还要把刚生成的矩阵中去掉几列,已知点点号是多少,就去掉第几列,(注意要按照点号大小,从大往小删除。
)在求B矩阵时要注意要把估计值中的角化成角度值,边化成以mm为单位。
然后算出矩阵l.对于权阵,角度的权全部定为1,边的权定为144/边观测值。
算出B,l,P矩阵后,就可以算出坐标改正数x,观测值改正数v,以及单位权中误差了,代码如下:
x=inv(B'*P*B)*B'*P*l;
v=B*x-l;%v是改正数,角以秒为单位,边以mm位单位
u0=sqrt(v'*P*v/((zg-yg)*2));%单位权中误差
注意坐标改正数和边长改正数以mm为单位,而角度改正数以秒为单位。
求出改正数后,即可求出坐标平差值和观测值平差值,继而还可求出坐标平差值中误差及各观测值平差值中误差。
对平差结果进行整合时,把坐标平差值带入,反算出每个边长和角的大小,与观测值平差值对照,若能对应上,则说明结果符合要求。
3、源程序
第一题:
[f_name1,filepath]=uigetfile('*.txt','pickafileforread');
fid=fopen(strcat(filepath,f_name1),'rt');
yd=fscanf(fid,'%f',1);%已知点个数
wd=fscanf(fid,'%f',1);%未知点数
s=fscanf(fid,'%f',1);%观测值个数
s2=fscanf(fid,'%f',1);%增加观测值个数
yh=fscanf(fid,'%f',yd);%已知点点号
HH=fscanf(fid,'%f',yd);%已知点高程
jz=fscanf(fid,'%f',[4,s+s2]);%第四行到末尾的观测数矩阵
jz=jz';
qh=jz(:
1);%起点点号
zh=jz(:
2);%终点点号
h=jz(:
3);%高差
jl=jz(:
4);%距离
fclose('all');
fori=(wd+1):
(wd+yd)
HHH(i)=HH(i-wd);
end
fori=1:
wd
HHH(i)=0;%给未知高程点添加高程零生成HHH
end
fori=1:
s
e=qh(i);
f=zh(i);
l(i)=h(i)-(HHH(f)-HHH(e));
end
l=l';
%常数项l
fori=1:
s
e=qh(i);
f=zh(i);
if(e<=wd)
B(i,e)=-1;
end
if(f<=wd)
B(i,f)=1;
end
end
jl1=jl(1:
s,:
);%未算上第二题加上的几个测段
P=diag(1./jl1);
xg=inv(B'*P*B)*B'*P*l;%xg是参数改正数;
V=B*xg-l;
q0=sqrt(V'*P*V/(s-wd));
disp('****************各待测点高程平差值为***************');
XP=xg
disp('**************************************************');
%q0为单位权中误差,xg为参数改正值,由于参数的估计值为0,所以各参数的平差值,即各待定点高程的平差值等于xg
%第二小题
Qxx=inv(B'*P*B);%协因数阵
disp('*****************各待定点高程平差值中误差为:
*********');
q=q0*sqrt(diag(Qxx))
disp('**************************************************');
%各待定点的中误差为:
k=q
(1);
fori=1:
wd
ifq(i)>k
k=q(i);
m=i;
%m为精度最弱点的点号
end
end
%寻找精度最弱的点
disp('****************精度最弱的点点号为:
********************');
disp(m);
disp('******************************************************');
%求出加测段后的B矩阵
fori=s+1:
s+s2
e=qh(i);
f=zh(i);
if(e<=wd)
B(i,e)=-1;
end
if(f<=wd)
B(i,f)=1;
end
end
P2=diag(1./jl);%加测段后的权阵P
Qxx2=inv(B'*P2*B);%加测段后的协方差
disp('*****************平差后各待定点的中误差为:
*****************');
q2=q0*sqrt(diag(Qxx2))
disp('********************************************