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

上传人:b****2 文档编号:18100578 上传时间:2023-04-24 格式:DOCX 页数:46 大小:1.12MB
下载 相关 举报
误差理论与测量平差课程设计实验报告讲解.docx_第1页
第1页 / 共46页
误差理论与测量平差课程设计实验报告讲解.docx_第2页
第2页 / 共46页
误差理论与测量平差课程设计实验报告讲解.docx_第3页
第3页 / 共46页
误差理论与测量平差课程设计实验报告讲解.docx_第4页
第4页 / 共46页
误差理论与测量平差课程设计实验报告讲解.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

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

《误差理论与测量平差课程设计实验报告讲解.docx》由会员分享,可在线阅读,更多相关《误差理论与测量平差课程设计实验报告讲解.docx(46页珍藏版)》请在冰豆网上搜索。

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

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

误差理论与测量平差

课程设计报告

 

●课程名称:

误差理论与测量平差

●课程题目:

平差计算器

●姓名:

江记洲

●专业:

测绘工程

●学号:

20104166

●学院:

土木与水利工程学院

●学校:

合肥工业大学

●指导老师:

陶庭叶

 

一、实验目的与要求

1)实验目的:

此次的课程设计可以用任何一种计算机语言来编写,这样给我们每个人很多的选择。

同时这样也是为了练习同学们对于一门语言的掌握和运用,大大的提高了我们的编程能力。

同时,通过对测量数据的误差处理,增强学生对《误差理论与测量平差基础》课程的理解,使学生牢固掌握测量数据处理的基本原理和公式,熟悉测量数据处理的基本技能和计算方法。

要求学生综合运用测绘知识、测量平差知识、数学知识和计算机知识,设计数学模型和程序算法,编制程序实现测量数据的自动化处理。

2)实验要求:

要求每位同学独立完成给定测量数据处理的数学模型和算法的设计,编写程序,调测程序,并编写程序设计文档。

要求数学模型和算法正确、程序运行正确、设计文档完备。

二、课程设计主要内容

课程设计的主要内容主要有:

1.新建一个基于单文档的MFC应用程序。

这只是基本的框架结构,里面包含了几个已知的类,在这些类的基础上,可以增加对象和变量。

然后是增加一个操作矩阵的类CMatrix的实现文件,Matrix.cpp和Matrix.h文件是从网上下载的,然后添加工程,创建了一个类,进行矩阵的计算。

通过运算符的重载,可以进行加减乘除计算,还可以进行矩阵的转置和求逆等运算。

现将该程序的Matrix.cpp文件附录如下:

//Matrix.cpp

#include"StdAfx.h"

#include"Matrix.h"

#ifdef_DEBUG

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#definenewDEBUG_NEW

#endif

//Construction/Destruction

//基本构造函数

CMatrix:

:

CMatrix()

{

m_nNumColumns=1;

m_nNumRows=1;

m_pData=NULL;

BOOLbSuccess=Init(m_nNumRows,m_nNumColumns);

ASSERT(bSuccess);

}

//指定行列构造函数

//参数:

//1.intnRows-指定的矩阵行数

//2.intnCols-指定的矩阵列数

CMatrix:

:

CMatrix(intnRows,intnCols)

{

m_nNumRows=nRows;

m_nNumColumns=nCols;

m_pData=NULL;

BOOLbSuccess=Init(m_nNumRows,m_nNumColumns);

ASSERT(bSuccess);

}

//初始化函数

//参数:

//1.intnRows-指定的矩阵行数

//2.intnCols-指定的矩阵列数

//

//返回值:

BOOL型,初始化是否成功

BOOLCMatrix:

:

Init(intnRows,intnCols)

{

if(m_pData)

{

delete[]m_pData;

m_pData=NULL;

}

m_nNumRows=nRows;

m_nNumColumns=nCols;

intnSize=nCols*nRows;

if(nSize<0)

returnFALSE;

//分配内存

m_pData=newdouble[nSize];

if(m_pData==NULL)

returnFALSE;//内存分配失败

if(IsBadReadPtr(m_pData,sizeof(double)*nSize))

returnFALSE;

//将各元素值置0

memset(m_pData,0,sizeof(double)*nSize);

returnTRUE;

}

//指定值构造函数

//参数:

//1.intnRows-指定的矩阵行数

//2.intnCols-指定的矩阵列数

//3.doublevalue[]-一维数组,长度为nRows*nCols,存储矩阵各元素的值

CMatrix:

:

CMatrix(intnRows,intnCols,doublevalue[])

{

m_nNumRows=nRows;

m_nNumColumns=nCols;

m_pData=NULL;

BOOLbSuccess=Init(m_nNumRows,m_nNumColumns);

ASSERT(bSuccess);

SetData(value);

}

//设置矩阵各元素的值

//参数:

//1.doublevalue[]-一维数组,长度为m_nNumColumns*m_nNumRows,存储

//矩阵各元素的值

//返回值:

voidCMatrix:

:

SetData(doublevalue[])

{

//emptythememory

memset(m_pData,0,sizeof(double)*m_nNumColumns*m_nNumRows);

//copydata

memcpy(m_pData,value,sizeof(double)*m_nNumColumns*m_nNumRows);

}

//方阵构造函数

//参数:

//1.intnSize-方阵行列数

CMatrix:

:

CMatrix(intnSize)

{

m_nNumRows=nSize;

m_nNumColumns=nSize;

m_pData=NULL;

BOOLbSuccess=Init(nSize,nSize);

ASSERT(bSuccess);

}

//方阵构造函数

//参数:

//1.intnSize-方阵行列数

//2.doublevalue[]-一维数组,长度为nRows*nRows,存储方阵各元素的值

CMatrix:

:

CMatrix(intnSize,doublevalue[])

{

m_nNumRows=nSize;

m_nNumColumns=nSize;

m_pData=NULL;

BOOLbSuccess=Init(nSize,nSize);

ASSERT(bSuccess);

SetData(value);

}

//拷贝构造函数

//参数:

//1.constCMatrix&other-源矩阵

CMatrix:

:

CMatrix(constCMatrix&other)

{

m_nNumColumns=other.GetNumColumns();

m_nNumRows=other.GetNumRows();

m_pData=NULL;

BOOLbSuccess=Init(m_nNumRows,m_nNumColumns);

ASSERT(bSuccess);

//copythepointer

memcpy(m_pData,other.m_pData,sizeof(double)*m_nNumColumns*m_nNumRows);

}

//析构函数

CMatrix:

:

~CMatrix()

{

if(m_pData)

{

delete[]m_pData;

m_pData=NULL;

}

}

//将方阵初始化为单位矩阵

//参数:

//1.intnSize-方阵行列数

//返回值:

BOOL型,初始化是否成功

BOOLCMatrix:

:

MakeUnitMatrix(intnSize)

{

if(!

Init(nSize,nSize))

returnFALSE;

for(inti=0;i

for(intj=0;j

if(i==j)

SetElement(i,j,1);

returnTRUE;

}

//将字符串转化为矩阵的值

//参数:

//1.CStrings-数字和分隔符构成的字符串

//2.constCString&sDelim-数字之间的分隔符,默认为空格

//3.BOOLbLineBreak-行与行之间是否有回车换行符,默认为真(有换行符)

//当该参数为FALSE时,所有元素值都在一行中输入,字符串的第一个

//数值应为矩阵的行数,第二个数值应为矩阵的列数

//返回值:

BOOL型,转换是否成功

BOOLCMatrix:

:

FromString(CStrings,constCString&sDelim/*=""*/,BOOLbLineBreak/*=TRUE*/)

{

if(s.IsEmpty())

returnFALSE;

//分行处理

if(bLineBreak)

{

CTokenizertk(s,"\r\n");

CStringListListRow;

CStringsRow;

while(tk.Next(sRow))

{

sRow.TrimLeft();

sRow.TrimRight();

if(sRow.IsEmpty())

break;

ListRow.AddTail(sRow);

}

//行数

m_nNumRows=ListRow.GetCount();

sRow=ListRow.GetHead();

CTokenizertkRow(sRow,sDelim);

CStringsElement;

//列数

m_nNumColumns=0;

while(tkRow.Next(sElement))

{

m_nNumColumns++;

}

//初始化矩阵

if(!

Init(m_nNumRows,m_nNumColumns))

returnFALSE;

//设置值

POSITIONpos=ListRow.GetHeadPosition();

for(inti=0;i

{

sRow=ListRow.GetNext(pos);

intj=0;

CTokenizertkRow(sRow,sDelim);

while(tkRow.Next(sElement))

{

sElement.TrimLeft();

sElement.TrimRight();

doublev=atof(sElement);

SetElement(i,j++,v);

}

}

returnTRUE;

}

//不分行(单行)处理

CTokenizertk(s,sDelim);

CStringsElement;

//行数

tk.Next(sElement);

sElement.TrimLeft();

sElement.TrimRight();

m_nNumRows=atoi(sElement);

//列数

tk.Next(sElement);

sElement.TrimLeft();

sElement.TrimRight();

m_nNumColumns=atoi(sElement);

//初始化矩阵

if(!

Init(m_nNumRows,m_nNumColumns))

returnFALSE;

//设置值

inti=0,j=0;

while(tk.Next(sElement))

{

sElement.TrimLeft();

sElement.TrimRight();

doublev=atof(sElement);

SetElement(i,j++,v);

if(j==m_nNumColumns)

{

j=0;

i++;

if(i==m_nNumRows)

break;

}

}

returnTRUE;

}

//将矩阵各元素的值转化为字符串

//

//参数:

//1.constCString&sDelim-数字之间的分隔符,默认为空格

//2BOOLbLineBreak-行与行之间是否有回车换行符,默认为真(有换行符)

//

//返回值:

CString型,转换得到的字符串

CStringCMatrix:

:

ToString(constCString&sDelim/*=""*/,BOOLbLineBreak/*=TRUE*/)const

{

CStrings="";

for(inti=0;i

{

for(intj=0;j

{

CStringss;

ss.Format("%f",GetElement(i,j));

s+=ss;

if(bLineBreak)

{

if(j!

=m_nNumColumns-1)

s+=sDelim;

}

else

{

if(i!

=m_nNumRows-1||j!

=m_nNumColumns-1)

s+=sDelim;

}

}

if(bLineBreak)

if(i!

=m_nNumRows-1)

s+="\r\n";

}

returns;

}

//将矩阵指定行中各元素的值转化为字符串

//参数:

//1.intnRow-指定的矩阵行,nRow=0表示第一行

//2.constCString&sDelim-数字之间的分隔符,默认为空格

//返回值:

CString型,转换得到的字符串

CStringCMatrix:

:

RowToString(intnRow,constCString&sDelim/*=""*/)const

{

CStrings="";

if(nRow>=m_nNumRows)

returns;

for(intj=0;j

{

CStringss;

ss.Format("%f",GetElement(nRow,j));

s+=ss;

if(j!

=m_nNumColumns-1)

s+=sDelim;

}

returns;

}

//将矩阵指定列中各元素的值转化为字符串

//参数:

//1.intnCol-指定的矩阵行,nCol=0表示第一列

//2.constCString&sDelim-数字之间的分隔符,默认为空格

//返回值:

CString型,转换得到的字符串

CStringCMatrix:

:

ColToString(intnCol,constCString&sDelim/*=""*/)const

{

CStrings="";

if(nCol>=m_nNumColumns)

returns;

for(inti=0;i

{

CStringss;

ss.Format("%f",GetElement(i,nCol));

s+=ss;

if(i!

=m_nNumRows-1)

s+=sDelim;

}

returns;

}

//设置指定元素的值

//参数:

//1.intnRows-指定的矩阵行数

//2.intnCols-指定的矩阵列数

//3.doublevalue-指定元素的值

//返回值:

BOOL型,说明设置是否成功

BOOLCMatrix:

:

SetElement(intnRow,intnCol,doublevalue)

{

if(nCol<0||nCol>=m_nNumColumns||nRow<0||nRow>=m_nNumRows)

returnFALSE;//arrayboundserror

if(m_pData==NULL)

returnFALSE;//badpointererror

m_pData[nCol+nRow*m_nNumColumns]=value;

returnTRUE;

}

//设置指定元素的值

//参数:

//1.intnRows-指定的矩阵行数

//2.intnCols-指定的矩阵列数

//返回值:

double型,指定元素的值

doubleCMatrix:

:

GetElement(intnRow,intnCol)const

{

ASSERT(nCol>=0&&nCol=0&&nRow

ASSERT(m_pData);//badpointererror

returnm_pData[nCol+nRow*m_nNumColumns];

}

//获取矩阵的列数

//参数:

//返回值:

int型,矩阵的列数

intCMatrix:

:

GetNumColumns()const

{

returnm_nNumColumns;

}

//获取矩阵的行数

//参数:

//返回值:

int型,矩阵的行数

intCMatrix:

:

GetNumRows()const

{

returnm_nNumRows;

}

//获取矩阵的数据

//参数:

//返回值:

double型指针,指向矩阵各元素的数据缓冲区

double*CMatrix:

:

GetData()const

{

returnm_pData;

}

//获取指定行的向量

//参数:

//1.intnRows-指定的矩阵行数

//2.double*pVector-指向向量中各元素的缓冲区

//返回值:

int型,向量中元素的个数,即矩阵的列数

intCMatrix:

:

GetRowVector(intnRow,double*pVector)const

{

if(pVector==NULL)

deletepVector;

pVector=newdouble[m_nNumColumns];

ASSERT(pVector!

=NULL);

for(intj=0;j

pVector[j]=GetElement(nRow,j);

returnm_nNumColumns;

}

//获取指定列的向量

//参数:

//1.intnCols-指定的矩阵列数

//2.double*pVector-指向向量中各元素的缓冲区

//返回值:

int型,向量中元素的个数,即矩阵的行数

intCMatrix:

:

GetColVector(intnCol,double*pVector)const

{

if(pVector==NULL)

deletepVector;

pVector=newdouble[m_nNumRows];

ASSERT(pVector!

=NULL);

for(inti=0;i

pVector[i]=GetElement(i,nCol);

returnm_nNumRows;

}

//重载运算符=,给矩阵赋值

//参数:

//1.constCMatrix&other-用于给矩阵赋值的源矩阵

//返回值:

CMatrix型的引用,所引用的矩阵与other相等

CMatrix&CMatrix:

:

operator=(constCMatrix&other)

{

if(&other!

=this)

{

BOOLbSuccess=Init(other.GetNumRows(),other.GetNumColumns());

ASSERT(bSuccess);

//copythepointer

memcpy(m_pData,other.m_pData,sizeof(double)*m_nNumColumns*m_nNumRows);

}

//finallyreturnareferencetoourselves

return*this;

}

//重载运算符==,判断矩阵是否相等

//参数:

//1.constCMatrix&other-用于比较的矩阵

//返回值:

BOOL型,两个矩阵相等则为TRUE,否则为FALSE

BOOLCMatrix:

:

operator==(constCMatrix&other)const

{

//首先检查行列数是否相等

if(m_nNumColumns!

=other.GetNumColumns()||m_nNumRows!

=other.GetNumRows())

returnFALSE;

for(inti=0;i

{

for(intj=0;j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

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

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