📄 matrix.cpp
字号:
// matrix.cpp: implementation of the matrix class.
//
//////////////////////////////////////////////////////////////////////
#include "matrix.h"
#include "iostream.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
matrix::matrix()
{
}
matrix::~matrix()
{
for(int i=0;i<n;i++)
delete []x;
delete x;
}
matrix::matrix(int a, int b)
{
m=a;
n=b;
x=new double *[n];
for(int i=0;i<m;i++)
x[i]=new double [m];
}
void matrix::input()
{
cout<<"输入矩阵的"<<m*n<<"个元素:\n";
for(int i=0;i<m;i++)
for (int j=0;j<n;j++)
cin>>x[i][j];
}
void matrix::output()
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<x[i][j]<<" ";
cout<<endl;
}
}
matrix & matrix::operator=(matrix &oth)
{
if(m==oth.m&&n==oth.n)
for(int i=0;i<m;i++)
for (int j=0;j<n;j++)
x[i][j]=oth.x[i][j];
else
cout<<"matrix don't match!\n";
return *this;
}
matrix & matrix::operator +(matrix &oth)
{
if(m==oth.m&&n==oth.n)
{
matrix *res=new matrix(m,n);
for(int i=0;i<m;i++)
for (int j=0;j<n;j++)
res->x[i][j]=x[i][j]+oth.x[i][j];
return *res;
}
else
{ cout<<"matrix don't match!!\n";
return *this;
}
}
matrix & matrix::operator -(matrix &oth)
{
if(m==oth.m&&n==oth.n)
{
matrix *res=new matrix(m,n);
for(int i=0;i<m;i++)
for (int j=0;j<n;j++)
res->x[i][j]=x[i][j]+oth.x[i][j];
return *res;
}
else
{ cout<<"matrix don't match!!\n";
return *this;
}
}
matrix & matrix::operator *(matrix &oth)
{
if(m==oth.m&&n==oth.n)
{
matrix *res=new matrix(m,n);
for(int i=0;i<m;i++)
for (int j=0;j<n;j++)
{
res->x[i][j]=0;
for(int k=0;k<n;k++)
res->x[i][j]+=x[i][k]*oth.x[k][j];
}
return *res;
}
else
{ cout<<"matrix don't match!!\n";
return *this;
}
}
matrix & matrix::zhuanzhi()
{
cout<<"矩阵的转置矩阵为:\n";
matrix *res=new matrix(n,m);
for(int i=0;i<n;i++)
for (int j=0;j<m;j++)
res->x[i][j]=x[j][i];
return *res;
}
double matrix::surplus()/*求矩阵行列式*/
{
int i,j,k,p,r;
double X,temp=1,temp1=1,s=0,s1=0;
if(n==2)
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if((i+j)%2) temp1*=x[i][j];
else temp*=x[i][j];
X=temp-temp1;
}
else
{
for(k=0;k<n;k++)
{
for(i=0,j=k;i<m,j<n;i++,j++)
temp*=x[i][j];
if(m-i)
{
for(p=m-i,r=m-1;p>0;p--,r--)
temp*=x[r][p-1];
}
s+=temp;
temp=1;
}
for(k=n-1;k>=0;k--)
{
for(i=0,j=k;i<m,j>=0;i++,j--)
temp1*=x[i][j];
if(m-i)
{
for(p=m-1,r=i;r<m;p--,r++)
temp1*=x[r][p];
}
s1+=temp1;
temp1=1;
}
X=s-s1;
}
return X;
}
matrix & matrix::ni()
{
matrix *c=new matrix(m,m);
double x=surplus();
if(x==0)
return *this;
for(int i=0;i<m-1;i++)
for(int j=0;j<m-1;j++)
{
int k,l;
matrix *b=new matrix(m-1,m-1);
for( k=0;k<i-1;k++)
for( l=0;l<j-1;l++)
b->x[k][l]=this->x[k][l];
for( k=0;k<i-1;k++)
for( l=i-1;l<m-1;l++)
b->x[k][l]=this->x[k][l+1];
for( k=i-1;k<m-1;k++)
for( l=0;l<j-1;l++)
b->x[k][l]=this->x[k+1][l];
for( k=i-1;k<m-1;k++)
for( l=j-1;l<m-1;l++)
b->x[k][l]=this->x[k+1][l+1];
c->x[j][i]=1/x*b->surplus();
delete b;
}
return *c;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -