gps网平差

这是一个使用MATLAB进行的平差课程设计,通过designer创建用户界面,实现GPS观测数据的读取、基线处理、法方程计算、误差椭圆绘制等功能。程序涉及数据文件的txt格式读取,权阵P和系数阵B的计算,以及结果的图形化展示。最终,程序能够输出平差报告,包括点坐标、点位误差和误差椭圆等信息。
摘要由CSDN通过智能技术生成

平差课程设计

编程语言为matlab,使用designer制作界面

希望同学们交流学习,在程序基础上进一步作出更酷的东西,切忌直接照抄。

程序源码及相关文档放在资源里,解压后使用matlab打开文件夹,并进一步打开gps.mlapp
在这里插入图片描述

除此之外也可以直接打开“打包后的程序”中的.exe文件,不过这种打开方式需要等待很久。打包好的程序后续发在资源里
链接:https://download.csdn.net/download/retuen0/18394146

当初我写的报告就不发给大家了,发几个截图可以大概参考
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GPSW网平差流程图
程序界面及介绍
下面展示部分源码,完整代码可在资源https://download.csdn.net/download/retuen0/18394146中获取

// A code block
核心计算源码
// An highlighted block
function funOpenFile(app)
 %读取 txt 格式的 GPS 观测数据
 [filename1,filepath]=uigetfile('*.txt','请选择 GPS 数据文
件');
 fid=fopen(strcat(filepath,filename1),'rt');
 if (fid==-1)
 msgbox('文件打开失败','Warn','warn');
 return;
 end
 yzds=fscanf(fid,'%f',1);%已知点数
 yzdh=fscanf(fid,'%f',1);%已知点号
 for i=1:yzds
 
x0(i)=fscanf(fid,'%f',1);y0(i)=fscanf(fid,'%f',1);z0(i)=fscanf(fid,'%
f',1);%已知点坐标
 end
 %disp(x0)
 wzds=fscanf(fid,'%f',1);%未知点数
 disp(wzds)
 jxs=fscanf(fid,'%f',1);%基线数
 sigma=fscanf(fid,'%f',1);
 for i=1:jxs
 qd(i)=fscanf(fid,'%f',1);zd(i)=fscanf(fid,'%f',1);%起
点与终点
 
dx(i)=fscanf(fid,'%f',1);dy(i)=fscanf(fid,'%f',1);dz(i)=fscanf(fid,'%
f',1);%基线向量
 
sigmaxx(i)=fscanf(fid,'%f',1);sigmaxy(i)=fscanf(fid,'%f',1);sigmaxz(i
)=fscanf(fid,'%f',1);
 
sigmayy(i)=fscanf(fid,'%f',1);sigmayz(i)=fscanf(fid,'%f',1);sigmazz(i
)=fscanf(fid,'%f',1);%基线方差阵
 end
 end
 end4.4.2 法方程系数阵 B 和权阵 P、l 的计算
%权阵 P 的形成
 D0=zeros(jxs*3,jxs*3);
 for i=1:jxs
 D0(3*i-1,3*i-2)=sigmaxy(i);
 D0(3*i,3*i-1)=sigmayz(i);
 D0(3*i,3*i-2)=sigmaxz(i);
 end
 
 D=zeros(jxs*3,jxs*3);
 
 for i=1:jxs
 D(3*i-2,3*i-2)=sigmaxx(i);
 D(3*i-1,3*i-1)=sigmayy(i);
 D(3*i,3*i)=sigmazz(i);
 end
 D=D0+D0'+D;
 
 P=inv((D/sigma^2));
 
 
 %系数阵 B
 B0=zeros(jxs*3,(wzds+1)*3);
 for i=1:jxs
 B0(3*i-2:3*i,3*qd(i)-2:3*qd(i))=diag([-1,-1,-1]);
 end
 for i=1:jxs
 B0(3*i-2:3*i,3*zd(i)-2:3*zd(i))=diag([1,1,1]);
 end 
 B=B0(1:jxs*3,4:(wzds+1)*3);
 
 
 
 %l 阵的形成
 l=zeros(jxs*3,1);
 for i=1:jxs
 l(3*i-2:3*i)=[dx(i)-(x(zd(i))-x(qd(i)));dy(i)-
(y(zd(i))-y(qd(i)));dz(i)-(z(zd(i))-z(qd(i)))];
 end4.4.3 GPS 控制网及误差椭圆的绘制
%绘制控制网图
 
 XT0=[x0(1),X(2:wzds+1)];
 YT0=[y0(1),Y(2:wzds+1)];
 dm=zeros(wzds+1,1);
 for i=1:wzds+1
 dm(i)=i;
 end
 %dm;
 for i=1:wzds+1
 text(app.UIAxes,XT0(i)+30,YT0(i)+30,num2str(dm(i)));
 end
 hold(app.UIAxes,'on')
 plot(app.UIAxes,x0(1),y0(1),'k^')
 hold(app.UIAxes,'on')
 plot(app.UIAxes,X(2:wzds+1),Y(2:wzds+1),'Ko')
 hold(app.UIAxes,'on')
 for i=1:jxs
 XT(2*i-1:2*i)=[XT0(qd(i)),XT0(zd(i))];
 YT(2*i-1:2*i)=[YT0(qd(i)),YT0(zd(i))];
 plot(app.UIAxes,XT(2*i-1:2*i),YT(2*i-1:2*i))
 end
 hold(app.UIAxes,'on')
 
 
 4.4.5 运算结果输出
%绘制误差椭圆 
 K=zeros(wzds+1,1);
 QEE=zeros(wzds+1,1);
 QFF=zeros(wzds+1,1);
 faiE=zeros(wzds+1,1);
 for i=2:wzds+1
 K(i)=sqrt((Q(3*(i-1)-2,3*(i-1)-2)-Q(3*(i-1)-1,3*(i-1)-
1))^2+4*Q(3*(i-1)-1,3*(i-1)-2)^2);
 QEE(i)=0.5*(Q(3*(i-1)-2,3*(i-1)-2)+Q(3*(i-1)-1,3*(i1)-1)+K(i));
 QFF(i)=0.5*(Q(3*(i-1)-2,3*(i-1)-2)+Q(3*(i-1)-1,3*(i1)-1)-K(i));
 pd(i)=(QEE(i)-Q(3*(i-1)-2,3*(i-1)-2))/Q(3*(i-1)-
1,3*(i-1)-2);
 if pd(i)>0
 faiE(i)=(atan(pd(i)))*180/pi;
 end
 if pd(i)<0
 faiE(i)=(atan(pd(i)))*180/pi+180;
 end
 end
 E=sqrt(delta0^2*QEE);
 F=sqrt(delta0^2*QFF);
 sita=0:pi/50:2*pi;
 lines=1;
 d11={'10000'};
 cl2=d11;
 scale=str2num(str2mat(cl2));
 hold on;
 for i=2:wzds+1
 
plot(app.UIAxes2,X(i)+cos(faiE(i)*pi/180)*E(i)*scale*cos(sita)-
sin(faiE(i)*pi/180)*F(i)*scale*sin(sita),Y(i)+cos(faiE(i)*pi/180)*F(i
)*scale*sin(sita)+sin(faiE(i)*pi/180)*E(i)*scale*cos(sita),'m')
 end
 hold on;
 zoom on;
 hold off; 
fn=fopen('GPS 网算例二平差报告.txt','w');
 fprintf(fn,'%s\n\n','GPS 网无约束平差报告:');
 fclose(fn);
 fn=fopen('GPS 网算例二平差报告.txt','a');
 fprintf(fn,'%s%s\n\n',strcat('单位权中误差
σ0=',num2str(delta0)),'m');
 fprintf(fn,'%s\n','平差后各点坐标如下所示(单位:m):');
 fprintf(fn,'%s\n','点名 X Y Z');
 for i=1:wzds
 fprintf(fn,'%s',num2str(dh(i)));
 fprintf(fn,'%16.4f',X(i));
 fprintf(fn,'%16.4f',Y(i));
 fprintf(fn,'%16.4f\n',Z(i));
 end
 fprintf(fn,'\n');
 fprintf(fn,'%s\n\n','各未知点平面点位中误差如下所示(单位:
mm):');
 fprintf(fn,'%s\n','点名 点位误差');
 for i=1:wzds
 fprintf(fn,'%s',num2str(dh(i)));
 fprintf(fn,'%16.4f\n',dwwc(i));
 end
 fprintf(fn,'\n');
 fprintf(fn,'%s\n\n','平差后各点误差椭圆如下所示(单位:mm):
');
 fprintf(fn,'%s\n','点名 长轴 短轴 极大值方向
');
 for i=1:wzds
 fprintf(fn,'%s',num2str(dh(i)));
 fprintf(fn,'%16.4f',E(i));
 fprintf(fn,'%16.4f',F(i));
 fprintf(fn,'%16.4f\n',phiE(i));
 end
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值