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);
时间: 2023-12-18 21:39:03 浏览: 108
这段代码是用于评估平差结果的精度和计算点位中误差的函数`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)`表示相关系数的计算。
需要注意的是,该代码段用于计算平差结果的精度和点位中误差,具体的变量和计算公式可能需要根据代码的其他部分进行理解和使用。
阅读全文