• 大小: 11KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-05
  • 语言: C/C++
  • 标签: C++  矩阵类  

资源简介

这个一个老外写的矩阵类,用C++实现,注释详细,把线性代数里用到的加减乘除和转置、求逆等矩阵运算都实现了,小可查到并修改了几个小错误,几近完美了。

资源截图

代码片段和文件信息

// Matrix.cpp: implementation of the CMatrix class.
//
//////////////////////////////////////////////////////////////////////

#include “stdafx.h“
#include “Matrix.h“

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction CMatrix
//////////////////////////////////////////////////////////////////////
IMPLEMENT_SERIAL(CMatrix Cobject 1) ;

#ifdef _DEBUG
int CMatrix::m_NextobjectNumber = 1 ;
#endif

CMatrix::CMatrix()
{
#ifdef _DEBUG
// so we can regonise each individual object
m_objectNumber = m_NextobjectNumber++ ;
TRACE(“Creating CMatrix object %1d - default constructor\n“ m_objectNumber) ;
#endif
// default constructor create a 1 * 1 array
m_NumColumns = 1 ;
m_NumRows = 1 ;
m_pData = NULL ;
m_pData = AllocateMemory(m_NumColumns m_NumRows) ;
IncrementReferenceCount() ; // count the reference to this memory
}

CMatrix::CMatrix(const CMatrix &other)
{
#ifdef _DEBUG
// so we can regonise each individual object
m_objectNumber = m_NextobjectNumber++ ;
TRACE(“Creating CMatrix object %1d - copy constructor other = %1d\n“ m_objectNumber other.m_objectNumber) ;
#endif
// copy constructor
m_pData = NULL ;
// use the other objects data pointer
m_NumColumns = other.m_NumColumns ;
m_NumRows = other.m_NumRows ;
m_pData = other.m_pData ; // copy the pointer
IncrementReferenceCount() ; // this thread can get the mutex multiple times without blocking
}

CMatrix::CMatrix(int nCols int nRows)
{
#ifdef _DEBUG
// so we can regonise each individual object
m_objectNumber = m_NextobjectNumber++ ;
TRACE(“Creating CMatrix object %1d - size constructor\n“ m_objectNumber) ;
#endif
// size constructor
ASSERT(nCols > 0) ; // matrix size error
ASSERT(nRows > 0) ; // matrix size error
m_pData = NULL ;
m_NumColumns = nCols ;
m_NumRows = nRows ;
m_pData = AllocateMemory(m_NumColumns m_NumRows) ;
IncrementReferenceCount() ; // count the reference to this memory
}

CMatrix::CMatrix(int size bool set_diagonal)
{
// construct a square matrix with 1.0‘s on the diagonal if required
#ifdef _DEBUG
// so we can regonise each individual object
m_objectNumber = m_NextobjectNumber++ ;
TRACE(“Creating CMatrix object %1d - square size constructor\n“ m_objectNumber) ;
#endif
// size constructor
ASSERT(size > 0) ; // matrix size error
m_pData = NULL ;
m_NumColumns = size ;
m_NumRows = size ;
m_pData = AllocateMemory(m_NumColumns m_NumRows) ;
IncrementReferenceCount() ; // count the reference to this memory
// set the dialognal if required
if (set_diagonal)
{
for (int i = 0 ; i < size ; ++i)
SetElement(i i 1.0) ;
}
}

// creates a CMatrix object from a SafeArray that contains a 2D matrix
// Note that you will probably have to call “VariantClear“ to correctly de-allocate
// 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       35902  2011-10-21 11:45  Matrix.cpp
     文件        8674  2011-10-19 14:20  Matrix.h

评论

共有 条评论