地球科学与环境工程学院
水准间接平差实验报告书
课程名:《误差理论与测量平差基础》 学 号: * 名: *** 指导老师: 日 期: 2015年12月7日
一、任务概述
利用MATLAB或者C++编程间接平差程序,通过该程序读取观测数据文件,并计算出平差结果。
二、计算结果截图:
图一
图二
图三
图四
三、水准网图
四、输入的数据格式
数据格式为TXT文件,如图所示:
TXT文件格式说明: (1)第一行格式
第一行分别表示观测个数5个,水准点数4个,未知点3个,已知点1个,所有数据用英文逗号隔开
(2)已知点数据格式
第二行开始是已知点点号和高程,一行列一个已知点点号和高程,由于该水准网只有一个已知点,所有只能列出一行。图中表示已知点点号为1,高程为237.483m
(3)测站起始点号格式
该部分表示测站的起始点点号
(4)测站终点点号格式
该部分表示测站的终点点号
(5)高差格式
该部分表示各测站的高差
(6)距离格式
该部分表示各测站的距离S
五、流程图
开始读取TXT数据提取出B、P、l矩阵平差计算输出结束
六、附件代码
function SDJianJiePingCha()
[FileName,PathName] = uigetfile('*.txt','打开水准观测数据');%打开文件 f=csvread( strcat(PathName,FileName));%打开文件并存在矩阵f中 point=f(1,2);%获取所有水准点个数 n=f(1,1);%获得观测个数n t=f(1,3);%获得必要观测个数t y=f(1,4);%获得已知点个数y
XX=zeros(point,1);%初始化XX阵等于0,方便下面把已知点高程和未知点参数估值
放到XX阵
B=zeros(n,t);%初始化B阵,方便下面求V=Bx-l中的系数阵B; for j=1:y
XX(j,1)=f(j+1,2);%把已知点高程放到XX阵中 end
data=f((2+y):end,:);%从文件中获取观测数据,并放到data阵中 h=data(:,3);%从data中获取观测高差,并放到h阵中 P=zeros(n);%初始化权阵P for j=1:n
P(j,j)=10/data(j,4);%以10km观测值为单位权误差计算权阵P end
for i=1:n%通过循环求B阵
point1=data(i,1);%获取某个测站的起始点号 point2=data(i,2);%获取某个测站的终点点号
if point1>y&&point2>y%当某测站起始点和终点高程都未知时,求B阵第i行 B(i,point1-y)=-1; B(i,point2-y)=1;
elseif point1<=y&&point2>y%当起始点高程已知和终点高程未知时,求B阵第i
行
B(i,point2-y)=1;
XX(point2,1)=XX(point1,1)+h(i,1);%求第i个参数估值
elseif point1>y&&point2<=y%当起始点高程未知和终点高程已知时,求B阵第i
行
B(i,point1-y)=-1;
XX(point1,1)=XX(point2,1)-h(i,1);%求第i个参数估值 end end
l=zeros(n,1);%初始化小l阵,方便下面求V=Bx-l中的系数阵l; for i=1:n%通过循环求小l point1=data(i,1); point2=data(i,2);
l(i,1)=-(XX(point2,1)-XX(point1,1)-h(i,1)); end
%带入间接平差数学模型公式进行计算:
r=n-t;%求多余观测数 N=B'*P*B; W=B'*P*l; x=N\\W;
X=XX((y+1):end,1)+x; V=B*x-l; L=h+V;
a0=sqrt(V'*P*V/r); Qxx=inv(N);
Dxx=a0*a0*inv(N);
%输出计算结果: disp('参数改正数:') x=x'
disp('参数平差值:') X=X'
disp('观测值改正数:') V=V'
disp('观测值平差值:') L=L'
disp('协方差阵:') Dxx
disp('单位权方差:') a0
disp('协因数阵:') Qxx B l P N W end
因篇幅问题不能全部显示,请点此查看更多更全内容