matrix.docx
- 文档编号:2850515
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:45
- 大小:23.89KB
matrix.docx
《matrix.docx》由会员分享,可在线阅读,更多相关《matrix.docx(45页珍藏版)》请在冰豆网上搜索。
matrix
以下是matrix.h文件
#ifndef_MATRIX_H_
#define_MATRIX_H_
classCVector;
classCMatrix
{
public:
CMatrix();
CMatrix(constCMatrix&mat);
CMatrix(introw,intline,doubleconst*data);
CMatrix(introw,intline);
CMatrixoperator*(constCMatrix&mat);
CMatrixoperator-(constCMatrix&mat);
CMatrixoperator+(constCMatrix&mat);
CMatrixoperator/(constdoubledenom);
CMatrixoperator|(constCMatrix&mat);
CMatrix&operator=(constCMatrix&mat);
CMatrixRotate()const;
doubleDetermine();//calculatedet(A)
CMatrixReverse();
CMatrixResidual(intm,intn)const;
voidEliminate();
voidGaussEliminate();
intGetRow();
intGetLine();
voidSwapRow(intr1,intr2);
voidSwapLine(intl1,intl2);
doubleGetEle(intm,intn)const;
voidSetEle(intm,intn,doubledata);
CMatrixGeneralInverse();
CMatrixCholeskyDecom()const;
CMatrixSubMatrix(introw1,introw2,intline1,intline2)const;
CMatrixQRDecompose()const;
CVectorGetEigenValue()const;
CVectorGetSingleValue();
voidPrint();
~CMatrix();
protected:
double*m_data;
intm_row;
intm_line;
frienddouble_Det(constCMatrix&mat);
friendintEquationResolve(constCMatrix&A,CMatrix&B);
friendintCompare(CMatrixconst&A,constCMatrix&B);
};
classCUnitMatrix:
publicCMatrix
{
public:
CUnitMatrix(intn);
~CUnitMatrix();
};
classCVector:
publicCMatrix
{
public:
CVector(intn);
CVector(CMatrix&mat,intn);//usethenthlinetobuildavetor
~CVector();
CVectorHouseHolder();
CMatrixHouseHolderMatrix();
doubleGetNorm()const;
};
#endif
以下是matrix.cpp文件
#include"matrix.h"
#include
#include
#include
usingnamespacestd;
CMatrix:
:
CMatrix()
{
m_row=0;
m_line=0;
}
CMatrix:
:
CMatrix(introw,intline,doubleconst*data)
{
m_row=row;
m_line=line;
m_data=newdouble[m_row*m_line];
memcpy(m_data,data,m_row*m_line*sizeof(double));//Here,ifthesizeofdataislessthanm_row*m_line
//Then,thevaluesafterthesizeofdatainm_datais
//notdefined.
}
CMatrix:
:
CMatrix(introw,intline)
{
m_row=row;
m_line=line;
m_data=newdouble[m_row*m_line];//ΪÊý¾Ý·ÖÅäµØÖ·
memset(m_data,0,m_row*m_line*sizeof(double));
}
CMatrix:
:
CMatrix(constCMatrix&mat)
{
m_row=mat.m_row;
m_line=mat.m_line;
m_data=newdouble[m_row*m_line];
memcpy(m_data,mat.m_data,sizeof(double)*m_row*m_line);
}
CMatrix:
:
~CMatrix()
{
if(NULL!
=m_data)
{
deletem_data;
m_data=NULL;
}
}
/****************************************************************
A(mxr)*B(rxn)=C(mxn)
C(i,j)=SUM(A(i,k)*B(k,j))(k=0...r-1)
*************************************************************************/
CMatrixCMatrix:
:
operator*(constCMatrix&mat)
{
CMatrixpmat(m_row,mat.m_line);
//pmat=newCMatrix(m_row,mat.m_line);//checkr
if(m_line!
=mat.m_row)
{
cout<<"operation*failed!
"< returnpmat; } inti,j,k; doublesum; for(i=0;i { for(j=0;j { sum=0.0; for(k=0;k { sum+=m_data[i*m_line+k]*mat.m_data[k*mat.m_line+j]; } pmat.m_data[i*mat.m_line+j]=sum; } } returnpmat; } CMatrixCMatrix: : operator-(constCMatrix&mat) { CMatrixpmat(m_row,mat.m_line); if((m_line! =mat.m_line)||(m_row! =mat.m_row)) { cout<<"operation-failed! "< returnpmat; } inti,j; for(i=0;i { for(j=0;j { pmat.m_data[i*m_line+j]=m_data[i*m_line+j]-mat.m_data[i*m_line+j]; } } returnpmat; } CMatrixCMatrix: : operator+(constCMatrix&mat) { CMatrixpmat(m_row,mat.m_line); if((m_line! =mat.m_line)||(m_row! =mat.m_row)) { cout<<"operation-failed! "< returnpmat; } inti,j; for(i=0;i { for(j=0;j { pmat.m_data[i*m_line+j]=m_data[i*m_line+j]+mat.m_data[i*m_line+j]; } } returnpmat; } CMatrix&CMatrix: : operator=(constCMatrix&mat) { if(&mat==this) { return*this; } if(mat.m_data==NULL) { return*this; } if(m_data! =NULL) { deletem_data; m_data=NULL; } m_row=mat.m_row; m_line=mat.m_line; m_data=newdouble[m_row*m_line]; memcpy(m_data,mat.m_data,sizeof(double)*m_row*m_line); return*this; } /******************************************************************************** Matrixcombination *******************************************************************************/ CMatrixCMatrix: : operator|(constCMatrix&mat) { inti; intj; if(m_row! =mat.m_row) { CMatrixpmat(0,0); returnpmat; } else { CMatrixpmat(m_row,m_line+mat.m_line); for(i=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matrix