水准网平差程序Matlab实现 全部代码,详细教程
一、程序结构:
输入文件格式如下所示:
1 读取文件:主要用到fopen, str2num函数
fid = fopen('input_leveling.txt','r');
line1 = fgetl(fid);
vec1 = str2num(line1);
%read the first line and change it to number vector (the number of known points, unknown points, and obervations)
num_known = vec1(1);
num_unknown = vec1(2);
num_observ = vec1(3);
line2 = fgetl(fid); %read the second line(the index of known point)
idx_known = str2num(line2);
line3 = fgetl(fid);% read the third line(the height of known point)
h_known = str2num(line3);
line4 = fgetl(fid)
flag = str2num(line4);
for iii = 1:num_observ % read the obersvation dataline = fgetl(fid);observs(:, iii) = str2num(line);
end
2 初始化高程向量,若其为未知点,则高程设为1e8,若为已知点,则为其高程。
start_pt = observs(1,:); % start point
end_pt = observs(2,:);% end point
h = observs(3,:);% oberved height
dist = observs(4,:);% distances of each baseline
num_total = num_known+num_unknown;
ttt = 1;
%create the origin height vector
%for unknown points -> 1e6
%for known points -> height
for kkk = 1:num_totalif(sum(kkk == idx_known) == 1)h0(kkk) = h_known(ttt);ttt = ttt+1;elseh0(kkk) = 1e6;end
end
3 利用while函数和for函数求其初始高程:
idx_unknown = find(h0 == 1e6);
%calculate the origin height of each points
while(sum(h0 == 1e6)>=1)for ttt = 1:num_observstarts= start_pt(ttt);ends = end_pt(ttt);if((h0(starts)>= 1e6)&&(h0(ends)<1e6))h0(starts) = h0(ends) - h(ttt);elseif((h0(starts)< 1e6)&&(h0(ends)>=1e6))h0(ends) = h0(starts) + h(ttt);endend
end
4 求解B矩阵, l 矩阵以及权重矩阵:
p = diag(1./dist);% p is the weight matrix
B = zeros(num_observ, num_unknown);% B
for hhh = 1:num_observ;starts_ = start_pt(hhh);ends_ = end_pt(hhh);if(sum(find( idx_known == starts_ )) == 0)%if the start point is unknown set it to -1starts_index = find(idx_unknown == starts_) ; B(hhh, starts_index) = -1;endif(sum(find( idx_known == ends_ )) == 0)%if the end point is unknown set it to 1ends_index = find(idx_unknown == ends_) ;B(hhh, ends_index) = 1;endl(hhh) = -h0(starts_) + h0(ends_) - h(hhh);
end
5 利用得到的B, p, l进行平差:
%adjustment
l = -l;Nbb = B'*p*B;
w = B'*p*l';
x_ = inv(Nbb)*w;
v = B*x_ - l';
num_r = num_observ-(num_unknown);
sigma0 = sqrt(v'*p*v/num_r);
Qxx = inv(B'*p*B);
ttt = 1;
for sss = 1: num_totalif(sum(find( idx_known == sss )) == 0 )sigma(sss) = sigma0*sqrt(Qxx(ttt,ttt));dh(sss) = x_(ttt);ttt = ttt+1;elsesigma(sss) = 0;dh(sss) = 0;end
end
6 输出
%outputs the results
fid2 = fopen('adjustment_results.txt','wt')
fprintf(fid2, '%4s %4s %4s %4s %4s\n', 'idx','h0','dh','h','theta_h')
for ppp = 1: num_totalfid3 = fopen('adjustment_results.txt','a') fprintf(fid3, '%2d %4.4f %4.4f %4.4f %4.4f\n', ppp, h0(ppp),dh(ppp),h0(ppp)+dh(ppp),sigma(ppp))
end
水准网平差程序Matlab实现 全部代码,详细教程相关推荐
- 水准路线平差c语言程序,水准网平差程序的设计与实现
水准网平差程序的设计与实现 维普资讯 http://doc.docsou.com 第1 6卷第 4期 2 0托 l 00 2月 昆明冶金高等专科学校学报 /, v1N 8 I 0. I l 6 . 4 ...
- 微信小程序如何进行反编译详细教程
前言介绍 小程序反编译,其实还是简单的,要想拿到微信小程序源码,先要拿到小程序的包,用反编译脚本跑一下,微信小程序代码包里的所有文件.所有资源就出来了(除了project.config.json小程序 ...
- clion配置_Ubuntu16.04系统下用CLion编译器调试ROS代码详细教程
本教程主要实践如何创建一个ROS工作空间和功能包实现基于ROS的信息发送和接收,同时用CLion如何去调试这个ROS工程.ROS允许多个工作空间并存,每个工作空间中创建需要的功能包,功能包创建于工作空 ...
- (C#)一个简易的水准网平差程序
这是用C#链表写的一个简易的水准网按测距平差的窗体程序. 这是运行的窗体界面: 读取的数据格式为:点号,高差,测距.例如: 得出的运行结果如下: 下面就是我的具体代码: using System; u ...
- PyInstaller打包深度学习模型代码详细教程
前言:由于工作需求,需要使用Pyinstaller库将Python脚本打包成exe文件,特此花几天时间查找资料,进行实验.将过程做个梳理,记录下来,方便自己和他人日后查询. 目录 一.安装PyInst ...
- QT Creator 应用程序*.exe文件打包发布详细教程【绿色便携形式 和 安装包形式】
说明:本文相关操作均基于 Windows10 操作系统 + Qt应用程序框架(5.14.1) + Qt Creator 集成开发环境(4.11.1) +MinGW编译环境,Qt 及 IDE的版本查 ...
- 餐饮外卖平台小程序源码,附带详细教程
餐饮外卖平台小程序V正式版,打造自己的美团/饿了么?平台.店铺在后台扣除自定义设置,资金统一进入平台账户,然后平台赚钱给商家店铺. 客户端小程序 客户端:自助点餐可以随时获取商家的商品动态,订单信息一 ...
- pycharm远程连接并自动同步代码详细教程
PS:Pycharm的远程连接功能需要专业版才有,社区版没有这个功能. 参考了:https://blog.csdn.net/pickoak/article/details/109827132 http ...
- 简单三步教会你在前端监控平台:安装小程序、uni-app探针(详细教程)
Webfunny现在支持微信小程序.uni-app的监控探针了,两个平台安装探针的方式很相似. 一.微信小程序探针安装 (1)首先创建一个微信小程序项目 (2)项目生成后,复制探针代码.在小程序项目的 ...
最新文章
- 计算机网络基础文档,计算机网络基础-20210608152532.pdf-原创力文档
- 【转】分享oldjun老大***网站的经验
- TraceEventsDB event(跟踪事件)总结
- mysql a锁_MYSQL中的锁
- 光伏补贴双轨制仍将延续
- 电影购票c语言程序,C语言电影购票系统小样
- stmt php,PHP mysqli_stmt_free_result() 函数用法及示例
- setup maven plugin connection
- 如梦若梦,肾盂肾炎似烟火
- 拼多多API根据ID获取商品详情
- oracle移动文件命令是什么意思,Oracle使用命令移动各类文件的方法
- canvas实现粒子跟随鼠标动画
- JDBC数据库驱动的下载与安装与连接
- 【论文阅读】Oriented R-CNN for Object Detection
- 零基础怎么学习视频剪辑?这篇初剪辑学者指南你一定不要错过
- 商用在线客服软件测试报告
- 如何使用VGG16提取某层的特征?
- Python模块之chardir: 使用chartdir生成各种图表
- 动词未然形+「ず」表示什么?
- C# Media Player控件(转)