ImageVerifierCode 换一换
格式:DOCX , 页数:46 ,大小:1.12MB ,
资源ID:18100578      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18100578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(误差理论与测量平差课程设计实验报告讲解.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

误差理论与测量平差课程设计实验报告讲解.docx

1、误差理论与测量平差课程设计实验报告讲解误差理论与测量平差课程设计报告 课程名称:误差理论与测量平差 课程题目: 平差计算器 姓名: 江记洲 专业: 测绘工程 学号: 20104166 学院: 土木与水利工程学院 学校: 合肥工业大学 指导老师: 陶庭叶 一、 实验目的与要求1) 实验目的:此次的课程设计可以用任何一种计算机语言来编写,这样给我们每个人很多的选择。同时这样也是为了练习同学们对于一门语言的掌握和运用,大大的提高了我们的编程能力。同时,通过对测量数据的误差处理,增强学生对误差理论与测量平差基础课程的理解,使学生牢固掌握测量数据处理的基本原理和公式,熟悉测量数据处理的基本技能和计算方法

2、。要求学生综合运用测绘知识、测量平差知识、数学知识和计算机知识,设计数学模型和程序算法,编制程序实现测量数据的自动化处理。2) 实验要求:要求每位同学独立完成给定测量数据处理的数学模型和算法的设计,编写程序,调测程序,并编写程序设计文档。要求数学模型和算法正确、程序运行正确、设计文档完备。二、 课程设计主要内容课程设计的主要内容主要有:1. 新建一个基于单文档的MFC应用程序。这只是基本的框架结构,里面包含了几个已知的类,在这些类的基础上,可以增加对象和变量。然后是增加一个操作矩阵的类 CMatrix 的实现文件,Matrix.cpp和Matrix.h文件是从网上下载的,然后添加工程,创建了一

3、个类,进行矩阵的计算。通过运算符的重载,可以进行加减乘除计算,还可以进行矩阵的转置和求逆等运算。现将该程序的Matrix.cpp文件附录如下:/ Matrix.cpp#include StdAfx.h#include Matrix.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construction/Destruction/ 基本构造函数CMatrix:CMatrix() m_nNumColumns = 1; m_nNumRows = 1; m_pData = N

4、ULL; BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); ASSERT(bSuccess);/ 指定行列构造函数/ 参数:/ 1. int nRows - 指定的矩阵行数/ 2. int nCols - 指定的矩阵列数CMatrix:CMatrix(int nRows, int nCols) m_nNumRows = nRows; m_nNumColumns = nCols; m_pData = NULL; BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); ASSERT(bSuccess);/ 初

5、始化函数/ 参数:/ 1. int nRows - 指定的矩阵行数/ 2. int nCols - 指定的矩阵列数/ 返回值:BOOL 型,初始化是否成功BOOL CMatrix:Init(int nRows, int nCols) if (m_pData) delete m_pData; m_pData = NULL; m_nNumRows = nRows; m_nNumColumns = nCols; int nSize = nCols*nRows; if (nSize 0) return FALSE; / 分配内存 m_pData = new doublenSize; if (m_pDa

6、ta = NULL) return FALSE; / 内存分配失败 if (IsBadReadPtr(m_pData, sizeof(double) * nSize) return FALSE; / 将各元素值置0 memset(m_pData, 0, sizeof(double) * nSize); return TRUE;/ 指定值构造函数/ 参数:/ 1. int nRows - 指定的矩阵行数/ 2. int nCols - 指定的矩阵列数/ 3. double value - 一维数组,长度为nRows*nCols,存储矩阵各元素的值CMatrix:CMatrix(int nRows

7、, int nCols, double value) m_nNumRows = nRows; m_nNumColumns = nCols; m_pData = NULL; BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); ASSERT(bSuccess); SetData(value);/ 设置矩阵各元素的值/ 参数:/ 1. double value - 一维数组,长度为m_nNumColumns*m_nNumRows,存储/ 矩阵各元素的值/ 返回值:无void CMatrix:SetData(double value) / empty th

8、e memory memset(m_pData, 0, sizeof(double) * m_nNumColumns*m_nNumRows); / copy data memcpy(m_pData, value, sizeof(double)*m_nNumColumns*m_nNumRows);/ 方阵构造函数/ 参数:/ 1. int nSize - 方阵行列数CMatrix:CMatrix(int nSize) m_nNumRows = nSize; m_nNumColumns = nSize; m_pData = NULL; BOOL bSuccess = Init(nSize, nSi

9、ze); ASSERT (bSuccess);/ 方阵构造函数/ 参数:/ 1. int nSize - 方阵行列数/ 2. double value - 一维数组,长度为nRows*nRows,存储方阵各元素的值CMatrix:CMatrix(int nSize, double value) m_nNumRows = nSize; m_nNumColumns = nSize; m_pData = NULL; BOOL bSuccess = Init(nSize, nSize); ASSERT (bSuccess); SetData(value);/ 拷贝构造函数/ 参数:/ 1. const

10、 CMatrix& other - 源矩阵CMatrix:CMatrix(const CMatrix& other) m_nNumColumns = other.GetNumColumns(); m_nNumRows = other.GetNumRows(); m_pData = NULL; BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); ASSERT(bSuccess); / copy the pointer memcpy(m_pData, other.m_pData, sizeof(double)*m_nNumColumns*m_nNumR

11、ows);/ 析构函数CMatrix:CMatrix() if (m_pData) delete m_pData; m_pData = NULL; / 将方阵初始化为单位矩阵/ 参数:/ 1. int nSize - 方阵行列数/ 返回值:BOOL 型,初始化是否成功BOOL CMatrix:MakeUnitMatrix(int nSize) if (! Init(nSize, nSize) return FALSE; for (int i=0; inSize; +i) for (int j=0; jnSize; +j) if (i = j) SetElement(i, j, 1); retu

12、rn TRUE;/ 将字符串转化为矩阵的值/ 参数:/ 1. CString s - 数字和分隔符构成的字符串/ 2. const CString& sDelim - 数字之间的分隔符,默认为空格/ 3. BOOL bLineBreak - 行与行之间是否有回车换行符,默认为真(有换行符)/ 当该参数为FALSE时,所有元素值都在一行中输入,字符串的第一个/ 数值应为矩阵的行数,第二个数值应为矩阵的列数/ 返回值:BOOL 型,转换是否成功BOOL CMatrix:FromString(CString s, const CString& sDelim /*= */, BOOL bLineBre

13、ak /*= TRUE*/) if (s.IsEmpty() return FALSE; / 分行处理 if (bLineBreak) CTokenizer tk(s, rn); CStringList ListRow; CString sRow; while (tk.Next(sRow) sRow.TrimLeft(); sRow.TrimRight(); if (sRow.IsEmpty() break; ListRow.AddTail(sRow); / 行数 m_nNumRows = ListRow.GetCount(); sRow = ListRow.GetHead(); CToken

14、izer tkRow(sRow, sDelim); CString sElement; / 列数 m_nNumColumns = 0; while (tkRow.Next(sElement) m_nNumColumns+; / 初始化矩阵 if (! Init(m_nNumRows, m_nNumColumns) return FALSE; / 设置值 POSITION pos = ListRow.GetHeadPosition(); for (int i=0; im_nNumRows; i+) sRow = ListRow.GetNext(pos); int j = 0; CTokenize

15、r tkRow(sRow, sDelim); while (tkRow.Next(sElement) sElement.TrimLeft(); sElement.TrimRight(); double v = atof(sElement); SetElement(i, j+, v); return TRUE; / 不分行(单行)处理 CTokenizer tk(s, sDelim); CString sElement; / 行数 tk.Next(sElement); sElement.TrimLeft(); sElement.TrimRight(); m_nNumRows = atoi(sEl

16、ement); / 列数 tk.Next(sElement); sElement.TrimLeft(); sElement.TrimRight(); m_nNumColumns = atoi(sElement); / 初始化矩阵 if (! Init(m_nNumRows, m_nNumColumns) return FALSE; / 设置值 int i = 0, j = 0; while (tk.Next(sElement) sElement.TrimLeft(); sElement.TrimRight(); double v = atof(sElement); SetElement(i,

17、j+, v); if (j = m_nNumColumns) j = 0; i+; if (i = m_nNumRows) break; return TRUE;/ 将矩阵各元素的值转化为字符串/ 参数:/ 1. const CString& sDelim - 数字之间的分隔符,默认为空格/ 2 BOOL bLineBreak - 行与行之间是否有回车换行符,默认为真(有换行符)/ 返回值:CString 型,转换得到的字符串CString CMatrix:ToString(const CString& sDelim /*= */, BOOL bLineBreak /*= TRUE*/) co

18、nst CString s=; for (int i=0; im_nNumRows; +i) for (int j=0; j= m_nNumRows) return s; for (int j=0; j= m_nNumColumns) return s; for (int i=0; im_nNumRows; +i) CString ss; ss.Format(%f, GetElement(i, nCol); s += ss; if (i != m_nNumRows-1) s += sDelim; return s;/ 设置指定元素的值/ 参数:/ 1. int nRows - 指定的矩阵行数/

19、 2. int nCols - 指定的矩阵列数/ 3. double value - 指定元素的值/ 返回值:BOOL 型,说明设置是否成功BOOL CMatrix:SetElement(int nRow, int nCol, double value) if (nCol = m_nNumColumns | nRow = m_nNumRows) return FALSE; / array bounds error if (m_pData = NULL) return FALSE; / bad pointer error m_pDatanCol + nRow * m_nNumColumns =

20、value; return TRUE;/ 设置指定元素的值/ 参数:/ 1. int nRows - 指定的矩阵行数/ 2. int nCols - 指定的矩阵列数/ 返回值:double 型,指定元素的值double CMatrix:GetElement(int nRow, int nCol) const ASSERT(nCol = 0 & nCol = 0 & nRow m_nNumRows); / array bounds error ASSERT(m_pData); / bad pointer error return m_pDatanCol + nRow * m_nNumColumn

21、s ;/ 获取矩阵的列数/ 参数:无/ 返回值:int 型,矩阵的列数int CMatrix:GetNumColumns() const return m_nNumColumns;/ 获取矩阵的行数/ 参数:无/ 返回值:int 型,矩阵的行数int CMatrix:GetNumRows() const return m_nNumRows;/ 获取矩阵的数据/ 参数:无/ 返回值:double型指针,指向矩阵各元素的数据缓冲区double* CMatrix:GetData() const return m_pData;/ 获取指定行的向量/ 参数:/ 1. int nRows - 指定的矩阵行

22、数/ 2. double* pVector - 指向向量中各元素的缓冲区/ 返回值:int 型,向量中元素的个数,即矩阵的列数int CMatrix:GetRowVector(int nRow, double* pVector) const if (pVector = NULL) delete pVector; pVector = new doublem_nNumColumns; ASSERT(pVector != NULL); for (int j=0; jm_nNumColumns; +j) pVectorj = GetElement(nRow, j); return m_nNumColu

23、mns;/ 获取指定列的向量/ 参数:/ 1. int nCols - 指定的矩阵列数/ 2. double* pVector - 指向向量中各元素的缓冲区/ 返回值:int 型,向量中元素的个数,即矩阵的行数int CMatrix:GetColVector(int nCol, double* pVector) const if (pVector = NULL) delete pVector; pVector = new doublem_nNumRows; ASSERT(pVector != NULL); for (int i=0; im_nNumRows; +i) pVectori = Ge

24、tElement(i, nCol); return m_nNumRows;/ 重载运算符=,给矩阵赋值/ 参数:/ 1. const CMatrix& other - 用于给矩阵赋值的源矩阵/ 返回值:CMatrix型的引用,所引用的矩阵与other相等CMatrix& CMatrix:operator=(const CMatrix& other) if (&other != this) BOOL bSuccess = Init(other.GetNumRows(), other.GetNumColumns(); ASSERT(bSuccess); / copy the pointer mem

25、cpy(m_pData, other.m_pData, sizeof(double)*m_nNumColumns*m_nNumRows); / finally return a reference to ourselves return *this ;/ 重载运算符=,判断矩阵是否相等/ 参数:/ 1. const CMatrix& other - 用于比较的矩阵/ 返回值:BOOL 型,两个矩阵相等则为TRUE,否则为FALSEBOOL CMatrix:operator=(const CMatrix& other) const / 首先检查行列数是否相等 if (m_nNumColumns != other.GetNumColumns() | m_nNumRows != other.GetNumRows() return FALSE; for (int i=0; im_nNumRows; +i) for (int j=0; jm_nNumColumns; +j)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1