平差实验报告及完整matlab程序
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fprintf(fn,'%s\n','高差改正数');
fprintf(fn,'%6.3f\n',v);
fprintf(fn,'%s\n','未知参数估值x');
fprintf(fn,'%6.3f\n',x1);
fprintf(fn,'%s\n','各点高程平差值');
fprintf(fn,'%6.3f\n',x2);
86.806
3
31.225
344.8
14.846
4
-71.952
149.2
25.706
5
-61.084
142.9
31.216
6
-44.178
250.0
42.626
7
10.847
128.2
8
16.350
98.0
9
11.409
196.1
五、计算过程
1、经典自由网平差(以6号点为例)
由已知可列出误差方程
(1)
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
s=fscanf(fm,'%f',inf)
end
%---------------从文件获取数据----------------------------------------------
switch dh_index
case 1
b=b(:,2:6);
x0=x0(2:6,:);
case 2
b(:,2)=[];
x0(2,:)=[];
case 3
b(:,3)=[];
x0(3,:)=[];
case 4
b(:,4)=[];
x0(4,:)=[];
case 5
b(:,5)=[];
x0(5,:)=[];
%------------------从文本框输入数据--------------------------------------------
%m=get(findobj('tag','edit1'),'string');
%l1=str2num(m);
%l1=l1';
%n=get(findobj('tag','edit2'),'string');
x1=1000*x1
x1=1/1000*x1;
x2=x1+x0;
x2=x2';
qxx=inv(b'*p*b+px*s1*s1'*px)*b'*p*b*inv(b'*p*b+px*s1*s1'*px)
qxx=qxx'
[filename2,p2]=uiputfile('*.txt','选择输出文件')
fn=fopen(strcat(p2,filename2),'w')
for i=1:9
p(i)=10/s(i);
end
p=diag(p);
l2=l1-b*x0;
s1=get(findobj('tag','edit4'),'string');
s1=str2num(s1);
px=diag(s1);
x1=inv(b'*p*b+px*s1*s1'*px)*b'*p*l2;
v=1000*(b*x1-l2)
3、拟稳平差
%---------------从文件获取数据----------------------------------------------
[f,p1]=uigetfile('*.txt','选择高差文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
case 6
b=b(:,1:5);
x0=x0(1:5,:) ;
end
%n=get(findobj('tag','edit2'),'string');
%s=str2num(n);
%s=s';
for i=1:9
p(i)=10/s(i);
end
p=diag(p);
x1=inv(b'*p*b)*b'*p*l2
x0=[-0.004;86.806;14.846;25.706;31.216;42.626];
%------------------从文本框输入数据-------------------------------
%m=get(findobj('tag','edit1'),'string');
%l1=str2num(m);
%l1=l1';
%-----------------从文本框输入数据-------------------------------
l2=l1-b*x0;
dh_index=get(findobj('tag','dh'),'value');
%----------选择点号---------------------------------------------
fprintf(fn,'%s\n','未知参数估值的协因数');
fprintf(fn,'%f %f %f %f %f %f\n',qxx);
fclose(fn)
x2=num2str(x2)
(3-2)
其中
(3-3)
(3-4)
得出
(3-5)
求得参数 的最佳估值为
参数 的协因数阵为
六、综合分析
从结果中我们可以看出,三种平差方法所得高差的改正数是相同的,所得参数 的最佳估值是不同的。
经典自由网平差适用于起算数据充足的情况,而秩亏自由网平差适用于起算数据不足,需要加一个基准条件才能进行平差计算。拟稳平差则是选择一些相对稳定的点进行平差,是那些不稳定的点不参与平差。根据实际情况我们选择适宜的平差方法。
fprintf(fn,'%6.3f\n',x2);
fprintf(fn,'%s\n','未知参数估值的协因数');
fprintf(fn,'%f %f %f %f %f %f\n',qxx);
fclose(fn)
x2=num2str(x2)
set(findobj('tag','edit3'),'string',x2)
[f,p1]=uigetfile('*.txt','选择高差文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
l1=fscanf(fm,'%f',inf);
end
[f,p1]=uigetfile('*.txt','选择距离文件')
while (~feof(fm))
l1=fscanf(fm,'%f',inf);
end
[f,p1]=uigetfile('*.txt','选择距离文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
s=fscanf(fm,'%f',inf)
f39;);
fprintf(fn,'%6.3f\n',v);
fprintf(fn,'%s\n','未知参数估值x');
fprintf(fn,'%6.3f\n',x1);
fprintf(fn,'%s\n','各点高程平差值');
fprintf(fn,'%6.3f\n',x2);
b=[-1 1 0 0 0 0;-1 0 0 1 0 0;-1 0 0 0 1 0;0 -1 1 0 0 0;0 -1 0 1 0 0;0 -1 0 0 0 1;0 0 -1 1 0 0;0 0 -1 0 1 0;0 0 0 0 -1 1];
x0=[-0.004;86.806;14.846;25.706;31.216;42.626];
%s=str2num(n);
%s=s';
%------------------从文本框输入数据--------------------------------------------
for i=1:9
p(i)=10/s(i);
end
p=diag(p);
l2=l1-b*x0;
s1=[1;1;1;1;1;1];
x1=inv(b'*p*b+s1*s1')*b'*p*l2;
v=b*x1-l2
x1=1000*x1
x1=1/1000*x1;
x2=x1+x0;
x2=x2';
qxx=inv(b'*p*b+s1*s1')*b'*p*b*inv(b'*p*b+s1*s1')
qxx=qxx'
[filename2,p2]=uiputfile('*.txt','选择输出文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
s=fscanf(fm,'%f',inf);
end
%------------------从文件获取数据--------------------------------
b=[-1 1 0 0 0 0;-1 0 0 1 0 0;-1 0 0 0 1 0;0 -1 1 0 0 0;0 -1 0 1 0 0;0 -1 0 0 0 1;0 0 -1 1 0 0;0 0 -1 0 1 0;0 0 0 0 -1 1];
end
%---------------从文件获取数据----------------------------------------------
b=[-1 1 0 0 0 0;-1 0 0 1 0 0;-1 0 0 0 1 0;0 -1 1 0 0 0;0 -1 0 1 0 0;0 -1 0 0 0 1;0 0 -1 1 0 0;0 0 -1 0 1 0;0 0 0 0 -1 1];
v=1000*(b*x1-l2);
x1=1000*x1;
x1=1/1000*x1;
x2=x1+x0;
x2=x2';
qxx=inv(b'*p*b);
qxx=qxx'
[filename2,p2]=uiputfile('*.txt','选择输出文件')
fn=fopen(strcat(p2,filename2),'w')
秩亏自由网平差综合计算
一、实验名称:秩亏自由网平差综合计算
二、实验目的:掌握应用MATLAB程序设计语言进行秩亏自由网平差计算:具体包括建立数学模型,点位稳定性分析、平差基准选取等。
三、实验设备:电脑
四、实验数据
序号
hi(m)
Si(km)
XO
1
86.809
204.1
-0.004
2
25.714
188.7
fn=fopen(strcat(p2,filename2),'w')
fprintf(fn,'%s\n','高差改正数');
fprintf(fn,'%6.3f\n',v);
fprintf(fn,'%s\n','未知参数估值x');
fprintf(fn,'%6.3f\n',x1);
fprintf(fn,'%s\n','各点高程平差值');
%l1=str2num(m);
%l1=l1';
%n=get(findobj('tag','edit2'),'string');
%s=str2num(n);
%s=s';
%------------------从文本框输入数据--------------------------------------------
fprintf(fn,'%s\n','未知参数估值的协因数');
fprintf(fn,'%f %f %f %f %f\n',qxx);
fclose(fn)
x2=num2str(x2);
set(findobj('tag','edit3'),'string',x2);
2、秩亏自由网平差
%---------------从文件获取数据----------------------------------------------
七、MATLAB程序代码
1、经典自由网平差
[f,p1]=uigetfile('*.txt','选择高差文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
l1=fscanf(fm,'%f',inf);
end
[f,p1]=uigetfile('*.txt','选择距离文件')
其中
根据最小二乘准则
(2)
组成法方程
(3)
解得参数 的最佳估值为
参数 的协因数阵为
2、秩亏自由网平差
由已知可列出误差方程
(2-1)
其中
根据重心基准的约束条件
(2-2)
得出
(2-3)
求得参数 的最佳估值为
参数 的协因数阵为
3、拟稳平差(选1、2、3、4号点为稳定点)
由已知可列出误差方程
(3-1)
其中
拟稳平差的约束条件为
x0=[-0.004;86.806;14.846;25.706;31.216;42.626];
%------------------从文本框输入数据--------------------------------------------
%m=get(findobj('tag','edit1'),'string');
fprintf(fn,'%6.3f\n',v);
fprintf(fn,'%s\n','未知参数估值x');
fprintf(fn,'%6.3f\n',x1);
fprintf(fn,'%s\n','各点高程平差值');
fprintf(fn,'%6.3f\n',x2);
86.806
3
31.225
344.8
14.846
4
-71.952
149.2
25.706
5
-61.084
142.9
31.216
6
-44.178
250.0
42.626
7
10.847
128.2
8
16.350
98.0
9
11.409
196.1
五、计算过程
1、经典自由网平差(以6号点为例)
由已知可列出误差方程
(1)
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
s=fscanf(fm,'%f',inf)
end
%---------------从文件获取数据----------------------------------------------
switch dh_index
case 1
b=b(:,2:6);
x0=x0(2:6,:);
case 2
b(:,2)=[];
x0(2,:)=[];
case 3
b(:,3)=[];
x0(3,:)=[];
case 4
b(:,4)=[];
x0(4,:)=[];
case 5
b(:,5)=[];
x0(5,:)=[];
%------------------从文本框输入数据--------------------------------------------
%m=get(findobj('tag','edit1'),'string');
%l1=str2num(m);
%l1=l1';
%n=get(findobj('tag','edit2'),'string');
x1=1000*x1
x1=1/1000*x1;
x2=x1+x0;
x2=x2';
qxx=inv(b'*p*b+px*s1*s1'*px)*b'*p*b*inv(b'*p*b+px*s1*s1'*px)
qxx=qxx'
[filename2,p2]=uiputfile('*.txt','选择输出文件')
fn=fopen(strcat(p2,filename2),'w')
for i=1:9
p(i)=10/s(i);
end
p=diag(p);
l2=l1-b*x0;
s1=get(findobj('tag','edit4'),'string');
s1=str2num(s1);
px=diag(s1);
x1=inv(b'*p*b+px*s1*s1'*px)*b'*p*l2;
v=1000*(b*x1-l2)
3、拟稳平差
%---------------从文件获取数据----------------------------------------------
[f,p1]=uigetfile('*.txt','选择高差文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
case 6
b=b(:,1:5);
x0=x0(1:5,:) ;
end
%n=get(findobj('tag','edit2'),'string');
%s=str2num(n);
%s=s';
for i=1:9
p(i)=10/s(i);
end
p=diag(p);
x1=inv(b'*p*b)*b'*p*l2
x0=[-0.004;86.806;14.846;25.706;31.216;42.626];
%------------------从文本框输入数据-------------------------------
%m=get(findobj('tag','edit1'),'string');
%l1=str2num(m);
%l1=l1';
%-----------------从文本框输入数据-------------------------------
l2=l1-b*x0;
dh_index=get(findobj('tag','dh'),'value');
%----------选择点号---------------------------------------------
fprintf(fn,'%s\n','未知参数估值的协因数');
fprintf(fn,'%f %f %f %f %f %f\n',qxx);
fclose(fn)
x2=num2str(x2)
(3-2)
其中
(3-3)
(3-4)
得出
(3-5)
求得参数 的最佳估值为
参数 的协因数阵为
六、综合分析
从结果中我们可以看出,三种平差方法所得高差的改正数是相同的,所得参数 的最佳估值是不同的。
经典自由网平差适用于起算数据充足的情况,而秩亏自由网平差适用于起算数据不足,需要加一个基准条件才能进行平差计算。拟稳平差则是选择一些相对稳定的点进行平差,是那些不稳定的点不参与平差。根据实际情况我们选择适宜的平差方法。
fprintf(fn,'%6.3f\n',x2);
fprintf(fn,'%s\n','未知参数估值的协因数');
fprintf(fn,'%f %f %f %f %f %f\n',qxx);
fclose(fn)
x2=num2str(x2)
set(findobj('tag','edit3'),'string',x2)
[f,p1]=uigetfile('*.txt','选择高差文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
l1=fscanf(fm,'%f',inf);
end
[f,p1]=uigetfile('*.txt','选择距离文件')
while (~feof(fm))
l1=fscanf(fm,'%f',inf);
end
[f,p1]=uigetfile('*.txt','选择距离文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
s=fscanf(fm,'%f',inf)
f39;);
fprintf(fn,'%6.3f\n',v);
fprintf(fn,'%s\n','未知参数估值x');
fprintf(fn,'%6.3f\n',x1);
fprintf(fn,'%s\n','各点高程平差值');
fprintf(fn,'%6.3f\n',x2);
b=[-1 1 0 0 0 0;-1 0 0 1 0 0;-1 0 0 0 1 0;0 -1 1 0 0 0;0 -1 0 1 0 0;0 -1 0 0 0 1;0 0 -1 1 0 0;0 0 -1 0 1 0;0 0 0 0 -1 1];
x0=[-0.004;86.806;14.846;25.706;31.216;42.626];
%s=str2num(n);
%s=s';
%------------------从文本框输入数据--------------------------------------------
for i=1:9
p(i)=10/s(i);
end
p=diag(p);
l2=l1-b*x0;
s1=[1;1;1;1;1;1];
x1=inv(b'*p*b+s1*s1')*b'*p*l2;
v=b*x1-l2
x1=1000*x1
x1=1/1000*x1;
x2=x1+x0;
x2=x2';
qxx=inv(b'*p*b+s1*s1')*b'*p*b*inv(b'*p*b+s1*s1')
qxx=qxx'
[filename2,p2]=uiputfile('*.txt','选择输出文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
s=fscanf(fm,'%f',inf);
end
%------------------从文件获取数据--------------------------------
b=[-1 1 0 0 0 0;-1 0 0 1 0 0;-1 0 0 0 1 0;0 -1 1 0 0 0;0 -1 0 1 0 0;0 -1 0 0 0 1;0 0 -1 1 0 0;0 0 -1 0 1 0;0 0 0 0 -1 1];
end
%---------------从文件获取数据----------------------------------------------
b=[-1 1 0 0 0 0;-1 0 0 1 0 0;-1 0 0 0 1 0;0 -1 1 0 0 0;0 -1 0 1 0 0;0 -1 0 0 0 1;0 0 -1 1 0 0;0 0 -1 0 1 0;0 0 0 0 -1 1];
v=1000*(b*x1-l2);
x1=1000*x1;
x1=1/1000*x1;
x2=x1+x0;
x2=x2';
qxx=inv(b'*p*b);
qxx=qxx'
[filename2,p2]=uiputfile('*.txt','选择输出文件')
fn=fopen(strcat(p2,filename2),'w')
秩亏自由网平差综合计算
一、实验名称:秩亏自由网平差综合计算
二、实验目的:掌握应用MATLAB程序设计语言进行秩亏自由网平差计算:具体包括建立数学模型,点位稳定性分析、平差基准选取等。
三、实验设备:电脑
四、实验数据
序号
hi(m)
Si(km)
XO
1
86.809
204.1
-0.004
2
25.714
188.7
fn=fopen(strcat(p2,filename2),'w')
fprintf(fn,'%s\n','高差改正数');
fprintf(fn,'%6.3f\n',v);
fprintf(fn,'%s\n','未知参数估值x');
fprintf(fn,'%6.3f\n',x1);
fprintf(fn,'%s\n','各点高程平差值');
%l1=str2num(m);
%l1=l1';
%n=get(findobj('tag','edit2'),'string');
%s=str2num(n);
%s=s';
%------------------从文本框输入数据--------------------------------------------
fprintf(fn,'%s\n','未知参数估值的协因数');
fprintf(fn,'%f %f %f %f %f\n',qxx);
fclose(fn)
x2=num2str(x2);
set(findobj('tag','edit3'),'string',x2);
2、秩亏自由网平差
%---------------从文件获取数据----------------------------------------------
七、MATLAB程序代码
1、经典自由网平差
[f,p1]=uigetfile('*.txt','选择高差文件')
fnal=strcat(p1,f);fpath=p1;
fm=fopen(fnal,'r');
while (~feof(fm))
l1=fscanf(fm,'%f',inf);
end
[f,p1]=uigetfile('*.txt','选择距离文件')
其中
根据最小二乘准则
(2)
组成法方程
(3)
解得参数 的最佳估值为
参数 的协因数阵为
2、秩亏自由网平差
由已知可列出误差方程
(2-1)
其中
根据重心基准的约束条件
(2-2)
得出
(2-3)
求得参数 的最佳估值为
参数 的协因数阵为
3、拟稳平差(选1、2、3、4号点为稳定点)
由已知可列出误差方程
(3-1)
其中
拟稳平差的约束条件为
x0=[-0.004;86.806;14.846;25.706;31.216;42.626];
%------------------从文本框输入数据--------------------------------------------
%m=get(findobj('tag','edit1'),'string');