Bf.SetSize(iAngleObs + iDistObs, iUnknown * 2 + AngleObsStation); for (int i = 0; i < iAngleObs + iDistObs; i++) { for (int j = 0; j < 2 * iUnknown; j++) { Bf(i, j) = B(i, j); } } Qf = Bf * Qxx * ~Bf;
时间: 2024-04-11 22:33:10 浏览: 30
这段代码中,首先通过调用`SetSize`函数设置了`Bf`矩阵的大小为`(iAngleObs + iDistObs, iUnknown * 2 + AngleObsStation)`。然后,通过两个嵌套的循环,将矩阵`B`的一部分值复制到`Bf`中。最后,通过矩阵乘法运算,计算出`Qf`矩阵的值,其中`Qxx`和`~Bf`分别表示矩阵的乘法操作数和转置操作。
相关问题
void CTraverseNetCalcu::FormErrorEquation(CMatrix& B, CMatrix& L) { AngleObsStation = 0; for (int i = 0; i < iAngleObs; i++) { if (pAngleObs[i].ObsAngle(DEG) == 0) AngleObsStation++; } B.SetSize(iAngleObs + iDistObs, iUnknown * 2 + AngleObsStation);//行数为角度方程个数+边长方程个数;列数为未知数个数x,y L.SetSize(iAngleObs + iDistObs, 1);//行数为角度误差和边长误差 int iLocation = 0; int iStation = 1;//站个数
这段代码是用来构建误差方程的。首先,将AngleObsStation初始化为0。然后,通过遍历角度观测值数组pAngleObs,判断每个观测角度是否为0。如果是0,则将AngleObsStation加1。
接下来,设置矩阵B的大小。行数为角度观测值个数加上距离观测值个数,列数为未知数个数的两倍加上AngleObsStation。这里未知数个数是iUnknown,表示未知点的个数。
然后,设置矩阵L的大小。行数同样为角度观测值个数加上距离观测值个数,列数为1。
最后,定义了两个变量iLocation和iStation。其中,iLocation用于记录当前位置,iStation用于表示站的个数。
需要注意的是,代码中的iAngleObs和iDistObs是表示角度观测值和距离观测值的个数。CMatrix是一个用于存储矩阵的类,B和L分别是B矩阵和L矩阵的对象。
void CTraverseNetCalcu::EvaluateAccuracy() { CMatrix aa; aa = ~V * P * V; sigma0 = sqrt(aa(0, 0) / (iAngleObs + iDistObs - 2 * iUnknown - AngleObsStation));//单位为" Qxx = Nbb.Inv();//未知数平差值的协因数阵 //计算点位中误差 for (int i = 0; i < iUnknown; i++) { pUnknown[i].dmx = sigma0 * sqrt(Qxx(2 * i, 2 * i)); pUnknown[i].dmy = sigma0 * sqrt(Qxx(2 * i + 1, 2 * i + 1)); pUnknown[i].dmk = sqrt(pUnknown[i].dmx * pUnknown[i].dmx + pUnknown[i].dmy * pUnknown[i].dmy); double Qx, Qy, Qxy, K;// Qx = Qxx(2 * i, 2 * i); Qy = Qxx(2 * i + 1, 2 * i + 1); Qxy = Qxx(2 * i, 2 * i + 1); K = sqrt((Qx - Qy) * (Qx - Qy) + 4 * Qxy * Qxy);
这段代码是用于评估平差结果的精度和计算点位中误差的函数`EvaluateAccuracy()`。
首先,定义一个临时矩阵`aa`。然后,计算残差的协方差矩阵,即`aa = ~V * P * V`。其中,~V表示残差矩阵的转置,P为权阵。
接下来,计算单位权中误差`sigma0`。公式为`sigma0 = sqrt(aa(0, 0) / (iAngleObs + iDistObs - 2 * iUnknown - AngleObsStation))`。其中,`aa(0, 0)`表示协方差矩阵的第一个元素,`iAngleObs`表示角度观测值的数量,`iDistObs`表示距离观测值的数量,`iUnknown`表示未知数的数量,`AngleObsStation`表示角度观测站点的数量。
然后,计算未知数平差值的协因数阵`Qxx`。通过求法方程的逆矩阵得到。
接下来,通过for循环遍历每个未知数点,计算点位中误差。对于每个未知数点,计算其x、y坐标的标准差`dmx`和`dmy`。公式为`dmx = sigma0 * sqrt(Qxx(2 * i, 2 * i))`和`dmy = sigma0 * sqrt(Qxx(2 * i + 1, 2 * i + 1))`。然后,计算点位中误差`dmk`,即`dmk = sqrt(dmx * dmx + dmy * dmy)`。
最后,计算相关系数`Qx`、`Qy`、`Qxy`和`K`。其中,`Qx = Qxx(2 * i, 2 * i)`表示x坐标的协方差,`Qy = Qxx(2 * i + 1, 2 * i + 1)`表示y坐标的协方差,`Qxy = Qxx(2 * i, 2 * i + 1)`表示x和y坐标的协方差,`K = sqrt((Qx - Qy) * (Qx - Qy) + 4 * Qxy * Qxy)`表示相关系数的计算。
需要注意的是,该代码段用于计算平差结果的精度和点位中误差,具体的变量和计算公式可能需要根据代码的其他部分进行理解和使用。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)