地球科学与环境工程学院水准间接平差实验报告书
课程名:《误差理论与测量平差基础》
学号:
*名:***
指导老师:
日期: 2015年12月7日
一、任务概述
利用MATLAB或者C++编程间接平差程序,通过该程序读取观测数据文件,并计算出平差结果。
二、计算结果截图:
图一图二
图三图四三、水准网图
四、输入的数据格式
数据格式为TXT文件,如图所示:
TXT文件格式说明:
(1)第一行格式
第一行分别表示观测个数5个,水准点数4个,未知点3个,
已知点1个,所有数据用英文逗号隔开
(2)已知点数据格式
第二行开始是已知点点号和高程,一行列一个已知点点号和高
程,由于该水准网只有一个已知点,所有只能列出一行。
图中
表示已知点点号为1,高程为237.483m
(3)测站起始点号格式
(4)测站终点点号格式(5)高差格式
(6)距离格式该部分表示测站的起始点点号
该部分表示测站的终点点号该部分表示各测站的高差
该部分表示各测站的距离S 五、流程图
六、附件代码
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。