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 + -
显示快捷键?