VC++矩阵类_jcxx01的空间_百度空间

因为编程需要,在VC++中自己写了个矩阵类,因为是初学,写得不够抽象,还望看客多多包涵

#include<iostream.h>


class Matrix
{
int RowMax,ColMax;
public:
float **Mat;
Matrix(int rm,int cm)//构造函数
{
   RowMax=rm;
   ColMax=cm;
   Mat=new float *[rm];
   for(int i=0;i<rm;i++)
   Mat[i]=new float[cm];
}
~Matrix(){}//析构函数
void Input()//输入
{
   cout<<"请输入矩阵:\n";
   for(int i=0;i<RowMax;i++)
   for(int j=0;j<ColMax;j++)
   cin>>Mat[i][j];
}
int GetRowMax(){return RowMax;}//取矩阵的行数
int GetColMax(){return ColMax;} //取矩阵的列数
void Matrix::GetRow(const int n)//取矩阵某一行的全部元素
{
   cout<<"Matrix(:,"<<n<<")=\n"<<'\t';
   for(int i=0;i<ColMax;i++)
    cout<<Mat[n-1][i]<<'\t';  
   cout<<'\n';
}
void Matrix::GetCol(const int n)//取矩阵某一列的全部元素
{
   cout<<"Matrix(:,"<<n<<")=\n";
   for(int i=0;i<RowMax;i++)
    cout<<'\t'<<Mat[i][n-1]<<'\n';
}
void Print()//显示矩阵
{
   cout<<"Matrix=\n";
   for(int i=0;i<RowMax;i++)
   {
    for(int j=0;j<ColMax;j++)
     cout<<Mat[i][j]<<'\t';
    cout<<'\n';
   }
}
Matrix operator+(Matrix &m)//矩阵加法;可直接写Matrix t1(2,2),t2(2,2),t3(2,2);t3=t1+t2
{
   Matrix t(RowMax,ColMax);
   for(int i=0;i<RowMax;i++)
    for(int j=0;j<ColMax;j++)
     t.Mat[i][j]=Mat[i][j]+m.Mat[i][j];
   return t;
}
Matrix operator-(Matrix &m)//矩阵减法;可直接写Matrix t1(2,2),t2(2,2),t3(2,2);t3=t1-t2
{
   Matrix t(RowMax,ColMax);
   for(int i=0;i<RowMax;i++)
    for(int j=0;j<ColMax;j++)
     t.Mat[i][j]=Mat[i][j]-m.Mat[i][j];
   return t;
}
Matrix operator*(Matrix &m)//矩阵乘法;可直接写Matrix t1(2,3),t2(3,2),t3(2,2);t3=t1*t2
{
   Matrix t(RowMax,m.ColMax);
   for(int i=0;i<RowMax;i++)
    for(int j=0;j<m.ColMax;j++)
    {
     float sum=0;
     for(int k=0;k<ColMax;k++)    
      sum+=Mat[i][k]*m.Mat[k][j];     
     t.Mat[i][j]=sum;         
    }
   return t;
}
void Trans();//矩阵转置
void Inv();//矩阵求逆
};

void Matrix::Trans()
{
const int rm=RowMax;
const int cm=ColMax;
Matrix tmat(cm,rm);
for(int i=0;i<cm;i++)
   for(int j=0;j<rm;j++)
    tmat.Mat[i][j]=Mat[j][i];
cout<<"Matrix'=\n";
for(i=0;i<cm;i++)
{
   cout<<'\t';
   for(int j=0;j<rm;j++)
    cout<<tmat.Mat[i][j]<<'\t';
   cout<<'\n';
}
}

void Matrix::Inv()
{
const int rm=RowMax;
const int cm=ColMax;
Matrix imat(rm,cm);
Matrix mat(rm,cm);
for(int i=0;i<rm;i++)
   for(int j=0;j<rm;j++)
    mat.Mat[i][j]=Mat[i][j];
for(i=0;i<rm;i++)
   for(int j=0;j<rm;j++)
    imat.Mat[i][j]=0;
for(i=0;i<rm;i++)
    imat.Mat[i][i]=1;
for(i=0;i<rm;i++)
{
   for(int j=0;j<rm;j++)
   {
    if(i!=j)
    {
     float t=mat.Mat[j][i]/mat.Mat[i][i];
     for(int k=0;k<rm;k++)
     {
      mat.Mat[j][k]-=mat.Mat[i][k]*t;
      imat.Mat[j][k]-=imat.Mat[i][k]*t;
     }
    }
   }
}
for(i=0;i<rm;i++)
   if(mat.Mat[i][i]!=1)
   {
    float t=mat.Mat[i][i];
    for(int j=0;j<rm;j++)
    {
     mat.Mat[i][j]=mat.Mat[i][j]/t;
     imat.Mat[i][j]=imat.Mat[i][j]/t;
    }
   }
cout<<"Matrix=\n";
for(i=0;i<rm;i++)
{
   for(int j=0;j<rm;j++)
    cout<<mat.Mat[i][j]<<'\t';
   cout<<'\n';
}
cout<<"Inverse=\n";
for(i=0;i<rm;i++)
{
   for(int j=0;j<rm;j++)
    cout<<imat.Mat[i][j]<<'\t';
   cout<<'\n';
}
}


void main()//main函数中可自行更改自己想写的程序段,我这边写出部分只是为了举例
{
Matrix mat1(2,3),mat2(3,2),mat3(2,2);
mat1.Input();
mat2.Input();
mat3=mat1*mat2;
mat3.Print();

}



郑重声明:资讯 【VC++矩阵类_jcxx01的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——