#include <iostream>
#include <Eigen/Dense>
int main(int argc, char** argv)
{
// ----------------------------构建系数方程--------------------------------
int n = 5; // 观测值总数
int t = 3; // 参数总数
Eigen::VectorXd L = Eigen::VectorXd::Zero(5);
L << 5.835, 3.782, 9.640, 7.384, 2.270; // 观测高差
// A点高程
double HA = 237.483;
// 计算参数的近似值
double X10 = HA + L(0);
double X20 = HA + L(2);
double X30 = HA + L(4);
Eigen::Vector3d X0(X10, X20, X30);
// 误差方程系数
Eigen::MatrixXd B = Eigen::MatrixXd::Zero(5, 3);
B << 1, 0, 0,
-1, 1, 0,
0, 1, 0,
0, 1, -1,
0, 0, 1;
Eigen::VectorXd l = Eigen::VectorXd::Zero(5);
l << 0, -23, 0, 14, 0;
// 定权,得观测值的权阵
Eigen::MatrixXd P = Eigen::MatrixXd::Zero(5, 5);
P.diagonal() << 2.9, 3.7, 2.5, 3.3, 4.0;
// -------------------------- - 间接平差求解-------------------------------- -
Eigen::MatrixXd NBB = B.transpose() * P * B;
Eigen::VectorXd W = B.transpose() * P * l;
Eigen::VectorXd x = NBB.inverse() * W;
Eigen::VectorXd V = B * x - l;
double lsq = V.transpose() * P * V;
double u = sqrt(lsq / (n - t));
std::cout << "法方程的解为:\n" << x << std::endl;
std::cout << "改正数V:\n" << V << std::endl;
std::cout << "参数平差值:\n" << X0 + x / 1000 << std::endl;
std::cout << "观测值的平差值:\n" << L + V << std::endl;
std::cout << "单位权中误差:\n" << u << std::endl;
return 0;
}
水准网间接平差案例的pythpn,C++,matlab代码实现
版权申诉
42 浏览量
2024-04-29
20:05:30
上传
评论
收藏 3KB RAR 举报
点云侠
- 粉丝: 4w+
- 资源: 74
最新资源
- 基于python实现的高考志愿填报参考系统源码+sql数据库(高分毕业设计).zip
- 基于python实现的高考志愿填报参考系统源码+数据库(毕业设计).zip
- 人工智能大赛无人车挑战杯车道线检测python源码.zip
- 基于风控模型的银行客户信用风险评估系统源码+项目说明+数据集(使用jupter notebook).zip
- python基于可变卷积改进的U-Net网络实现对胰腺细胞的精准切割源码(高分项目).zip
- python基于可变卷积改进的U-Net网络实现对胰腺细胞的精准切割源码(高分项目).zip
- 基于javascript实现的蚁群算法(JS代码)
- 基于python实现的随机森林(python代码)
- python读取excel到数据库中,简单的数据库管理脚本
- 7777端口抓包数据集
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈