matrix运算c代码.docx
- 文档编号:7495920
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:103
- 大小:35.38KB
matrix运算c代码.docx
《matrix运算c代码.docx》由会员分享,可在线阅读,更多相关《matrix运算c代码.docx(103页珍藏版)》请在冰豆网上搜索。
matrix运算c代码
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//Matrix.cpp
//
//操作矩阵的类CMatrix的实现文件
//
//周长发编制,2002/8
//////////////////////////////////////////////////////////////////////
#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-指定的矩阵列数
//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.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.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.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/*=""*/,BOOL bLineBreak/*=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.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.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; } ////////////////////////////////////////////////////////////////////// //设置指定元素的值 // //参
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matrix 运算 代码