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;//站个数
时间: 2024-04-19 11:29:54 浏览: 32
这段代码是用来构建误差方程的。首先,将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::NetWeight(CMatrix& P)//组权阵 { P.SetSize(iAngleObs + iDistObs, iAngleObs + iDistObs); for (int i = 0; i < (iAngleObs + iDistObs); i++) { for (int j = 0; j < (iAngleObs + iDistObs); j++) { if (i == j)//只有主对角线上才有元素 { if (i < iAngleObs) { P(i, j) = 1; } else P(i, j) = 100 / pDistObs[i - iAngleObs].ObsDist; } } } //double aa = P(iAngleObs + 1, iAngleObs + 1);//检核用的 }
这段代码实现了一个名为`NetWeight`的函数,用于计算组权阵`P`。
首先,通过调用`SetSize`函数设置了`P`矩阵的大小为`(iAngleObs + iDistObs, iAngleObs + iDistObs)`。
然后,通过两个嵌套的循环,遍历`P`矩阵的所有元素。在每个元素处,根据其在矩阵中的位置进行判断。
如果`i`和`j`相等,说明当前元素位于主对角线上,根据`i`的值进行进一步判断。
如果`i`小于`iAngleObs`,说明当前元素对应的是角度观测值,将其赋值为1。
如果`i`大于等于`iAngleObs`,说明当前元素对应的是距离观测值,将其赋值为100除以对应距离观测值的观测距离。
最后,函数结束。
注释部分的代码`//double aa = P(iAngleObs + 1, iAngleObs + 1);//检核用的`是一个注释,用于检核某个特定位置上的矩阵元素的值,不会对程序产生实际影响。
void CTraverseNetCalcu::OutMatrixToFile(const CMatrix& mat, CStdioFile& SF) { CString strLine, strTmp; for (int i = 0; i < mat.Row(); i++) { strLine.Empty(); for (int j = 0; j < mat.Col(); j++) { strTmp.Format(_T("%.4f "), mat(i, j)); strLine = strLine + strTmp;//格式化后添加过去 } SF.WriteString(strLine + _T("\r\n")); } }
这段代码是 CTraverseNetCalcu 类的成员函数 OutMatrixToFile 的实现。该函数用于将矩阵 mat 的内容输出到文件 SF 中。
首先,声明了两个字符串变量 strLine 和 strTmp,用于保存每一行和每个元素的临时字符串。
然后,使用两个嵌套的 for 循环遍历矩阵 mat 的每个元素:
1. 外层循环控制行数,从 0 到 mat.Row()-1。
2. 内层循环控制列数,从 0 到 mat.Col()-1。
3. 在内层循环中,使用 strTmp.Format() 函数将矩阵元素 mat(i, j) 格式化为字符串,并将格式化后的字符串添加到 strLine 中。
4. 内层循环结束后,将一行数据 strLine 加上换行符 \r\n 写入文件 SF 中,使用 SF.WriteString() 函数。
这样,通过遍历矩阵的每个元素,并将格式化后的字符串逐行写入文件,就完成了将矩阵内容输出到文件的操作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)