cmatrix.cpp

来自「有限元计算,可以计算一型梁单元的软件. 我们可以共同提高」· C++ 代码 · 共 155 行

CPP
155
字号
#include "iostream.h"#include "CMatrix.h"#include "memory.h"CMatrix::CMatrix(){
	//构造函数,初始化矩阵为一3X1矩阵	m_nRow=3;	m_nCol=1;	m_adValue=new double * [m_nRow];	for(int loop=1;loop<=m_nRow;loop++)		m_adValue[loop-1]=new double [m_nCol];}CMatrix::CMatrix(int nRow,int nCol){
	//初始化矩阵,分配矩阵nRowXnCol内存空间	m_nRow=nRow;	m_nCol=nCol;	m_adValue=new double * [m_nRow];	for(int loop1=1;loop1<=m_nRow;loop1++)		m_adValue[loop1-1]=new double [m_nCol];}CMatrix::CMatrix(int nRow,int nCol,double dBuf){
	//初始化矩阵,分配矩阵nRowXnCol内存空间
	//并整体赋初值dbuf	m_nRow=nRow;	m_nCol=nCol;	m_adValue=new double * [m_nRow];	for(int loop1=1;loop1<=m_nRow;loop1++)		m_adValue[loop1-1]=new double [m_nCol];	for(int i=1;i<=m_nRow;i++)		for(int j=1;j<=m_nCol;j++)			m_adValue[i-1][j-1]=dBuf;}CMatrix::CMatrix(const CMatrix &mat){
	//重复构造函数,将mat矩阵拷贝到新矩阵	m_nRow=mat.m_nRow;	m_nCol=mat.m_nCol;	m_adValue=new double * [m_nRow];	for(int loop1=1;loop1<=m_nRow;loop1++)	{		m_adValue[loop1-1]=new double [m_nCol];		memcpy(m_adValue[loop1-1],mat.m_adValue[loop1-1],m_nCol*sizeof(double));	}}CMatrix::~CMatrix(void){
	//析造函数,释放矩阵的内存空间	for(int i=1;i<=m_nRow;i++)		delete[] m_adValue[i-1];	delete[] m_adValue;}CMatrix CMatrix::operator *(const CMatrix&m){
	//重载*运算,
	//相当于矩阵相乘,返回矩阵	CMatrix mTmp(m_nRow,m.m_nCol);	for(int i=1;i<=m_nRow;i++)	{		for(int j=1;j<=m.m_nCol;j++)		{			mTmp.m_adValue[i-1][j-1]=0.0;			for(int k=1;k<=m_nCol;k++)				mTmp.m_adValue[i-1][j-1]+=m_adValue[i-1][k-1]*m.m_adValue[k-1][j-1];		}	}	return mTmp;}CMatrix CMatrix::operator +(const CMatrix&m){
	//重载+运算,返回两相加矩阵之和	CMatrix mTmp(m_nRow,m_nCol);	for(int i=1;i<=m_nRow;i++)	{		for(int j=1;j<=m.m_nCol;j++)		{			mTmp.m_adValue[i-1][j-1]=m_adValue[i-1][j-1]+m.m_adValue[i-1][j-1];		}	}	return mTmp;}CMatrix& CMatrix::operator =(double dBuf){
	//重载=运算,将矩阵所有元素值赋为dbuf
	//相当于A=a,返回矩阵,	for(int i=1;i<=m_nRow;i++)	{		for(int j=1;j<=m_nCol;j++)		{			m_adValue[i-1][j-1]=dBuf;		}	}	return *this;}CMatrix& CMatrix::operator =(const CMatrix&m){
	//重载=运算,将矩阵值赋为另外一元素
	//相当于A=B,返回矩阵,	if(m_nRow!=m.m_nRow||m_nCol!=m.m_nCol)		Realloc(m.m_nRow,m.m_nCol);	int nColByte=m.m_nCol*sizeof(double);	for(int i=1;i<=m.m_nRow;i++)		memcpy(m_adValue[i-1],m.m_adValue[i-1],nColByte);	return *this;}CMatrix& CMatrix::Trans(const CMatrix &m){
	//矩阵转秩,返回转秩后的矩阵	for(int i=1;i<=m_nRow;i++)		for(int j=1;j<=m_nCol;j++)			m_adValue[i-1][j-1]=m.m_adValue[j-1][i-1];	return *this;}CMatrix	CMatrix::operator* (double dBuf){
	//重载*运算,相当于矩阵数乘运算
	//A=B*a,返回矩阵	CMatrix mTmp(m_nRow,m_nCol);	for(int i=1;i<=m_nRow;i++)		for(int j=1;j<=m_nCol;j++)			mTmp.m_adValue[i-1][j-1]=m_adValue[i-1][j-1]*dBuf;	return mTmp;}void CMatrix::Realloc(int row,int col){
	//重新分配矩阵内存空间,rowXcol个元素.	for(int i=1;i<=m_nRow;i++)		delete [] m_adValue[i-1];	delete [] m_adValue;	m_nRow=row;	m_nCol=col;	m_adValue=new double * [m_nRow];	for(int loop1=1;loop1<=m_nRow;loop1++)		m_adValue[loop1-1]=new double [m_nCol];}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?