从间接平差到程序:一个水准网最小二乘解算案例

文章导读摘要由 Qwen 生成

以一个含两个已知点、三个未知点和七条观测边的水准网为例,梳理间接平差的观测方程、法方程、精度评定与程序实现边界,并给出可复算的系数矩阵和计算结果。

记录一下课程设计。

问题:已知两点,求三个未知点

设已知点为 ,未知点为 。已知高程分别为:

观测得到七条高差及对应路线长度。路线越长,观测通常越不稳定,因此这里采用与距离成反比的权:

其中 的单位为 km, 为第 条观测的权。

边号起点终点观测高差 / m距离 / km
1A1.3590001.10.909091
2A2.0090001.70.588235
3B0.3630002.30.434783
4B1.0120002.70.370370
50.6570002.40.416667
60.2380001.40.714286
7B-0.5950002.60.384615

单独沿任一路线推高程,会因观测误差得到彼此不完全一致的答案;平差的任务就是在全部观测共同约束下,找到一组最合理的未知高程。

从观测方程到法方程

一般地,设观测值为 ,观测值改正数为 ,待定参数为 ,则平差后的观测值满足:

对非线性问题,可在近似值 附近展开:

忽略二阶及以上小量后,得到线性化观测方程。写成矩阵形式就是:

这里 是观测改正数向量, 是系数矩阵, 是参数改正数向量, 是常数项向量。

间接平差要求加权改正数平方和最小:

代入并对 求极值,可得:

则法方程与参数改正数分别为:

在这个案例中,未知参数的顺序取为 ,对应的系数矩阵为:

每一行只表达一条观测边对未知点高程的影响。例如,第五条边从 指向 ,所以该行是 ;第七条边从 指向已知点 ,因而只保留 的系数

解算后还能得到什么

求出 后,程序还应继续完成结果回代,而不是只停在一个参数向量:

这三步分别给出未知点平差值、观测改正数和观测值平差值。对于本例,最终高程为:

对应的改正数很小:

边号改正数 / m平差后高差 / m
1-0.0002431.358757
20.0028552.011855
3-0.0042430.358757
4-0.0001451.011855
5-0.0039020.653098
6-0.0006150.237385
7-0.001142-0.596142

精度评定也必须伴随结果一起输出。若观测数为 、未知参数数为 ,则多余观测数为:

单位权中误差为:

未知参数的协因数阵与方差阵为:

本例计算出的单位权中误差约为 。它不是某一个点的误差,而是这套观测在单位权意义下的整体精度指标。

程序实现:让流程可操作,而不只是可计算

将平差公式写成程序时,我把责任分开,而不是把所有逻辑堆在窗体事件里:

模块责任
KnownPointObservation保存已知点、观测边与距离等输入数据
DataCheck检查空点名、重复点名、高差格式、正距离、与已知点的连通性、观测数量等
MatrixOperations用二维数组实现加减乘、转置和求逆
LeastSquares生成 ,解法方程并回代计算
DataStore暂存已导入或手动录入的数据
ReportStringBuilder 组织平差报告,供预览或导出
LogService记录导入、检查、计算与输出过程

整个交互流程可以概括为:

导入/手动输入 → 数据检查 → 保存数据 → 平差计算 → 查看结果 → 输出报告

             检查失败则提示并返回输入

这里数据检查并非附属功能。若水准网中存在孤立点、观测边没有连到已知点,或者距离为零,后续矩阵即使“算出结果”也没有测量意义。因此,先验证网络可用性,再进入最小二乘计算,是程序层面对应理论前提的一道关口。

小结

这个案例把水准网间接平差压缩成了一条清晰的链路:观测数据决定权阵与常数项,网络拓扑决定系数矩阵,最小二乘条件导出法方程,回代和精度评定则让结果从“一个答案”变成可解释的测量成果。

对我来说,自己实现矩阵运算和法方程求解的价值不在于替代现成库,而在于真正看清 和观测改正数是如何从一条条水准路线中生长出来的。

从间接平差到程序:一个水准网最小二乘解算案例

/posts/e67166f3/
作者
biss
发布于
许可协议
CC BY-NC-SA 4.0
测量平差最小二乘C#矩阵
订阅打赏

Comments

从间接平差到程序:一个水准网最小二乘解算案例

Ctrl + 右键:浏览器原生菜单