📄 matclass.cpp
字号:
#include <stdlib.h>
#include <math.h>
class MAT
{
public:
MAT();
MAT(int hang,int lie);
MAT convert();
~MAT();
int row;
int rank;
double *elem;
void print();//print out the Max
void input();
void input1();
private:
char *name;
};
void MAT::input()
{
cout<<"input the elements of this mat:"<<endl;
for(int i=0;i<row*rank;i++)
cin>>elem[i];
}
void MAT::input1()
{
for(int i=0;i<row*rank;i++)
this->elem[i]=1;
}
MAT::MAT()
{
}
void MAT::print()
{
for(int i=0;i<row;i++)
{
for(int j=0;j<rank;j++)
cout<<" "<<*(elem+i+j+i*(rank-1));
cout<<endl;}
}
MAT::MAT(int hang,int lie)
{//1.input the number of row and rank
row=hang;
rank=lie;
//2.input the elements of the Mat
elem=new double[hang*lie];
for(int i=0;i<row*rank;i++)
elem[i]=0;
//
}
MAT::~MAT()
{
;
}
MAT MAT::convert()
{
MAT B;
B.row=rank;
B.rank=row;
B.elem=new double[B.row*B.rank];
for(int i=0;i<B.rank;i++)
for(int j=0;j<B.row;j++)
{
int k=i+j+j*(B.rank-1);
B.elem[k]=*(elem+i+j+i*(B.row-1));
}
return B;
}
int tim(MAT A,MAT B,MAT C)
{ int i;
if(A.rank!=B.row) return 0;
for(i=0;i<(C.row*C.rank);i++) C.elem[i]=0;
for(i=0;i<C.row;i++)
for(int j=0;j<C.rank;j++)
for(int k=0;k<B.row;k++)
C.elem[i+j+i*(C.rank-1)]+=A.elem[i+k+i*(A.rank-1)]*B.elem[k+j+k*(B.rank-1)];
return 1;
}
//*********矩阵求逆函数定义:***************
//函数说明:
//1 MAX定义矩阵最大维数;
//2 形参C[][]为输入矩阵,B[][]为输出矩阵
//3 矩阵可逆,返回值为1/否则,返回值为-1;
int inverse(MAT C,MAT B)
{
MAT A(C.row,C.row);
double b,js(0);
int m, i,j,k;
if(C.row!=C.rank) return 0;
m=C.row;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
A.elem[i+j+i*(A.rank-1)]=C.elem[i+j+i*(C.rank-1)];
if(i==j) B.elem[i+j+i*(B.rank-1)]=1;
else B.elem[i+j+i*(B.rank-1)]=0;
}
for(i=0;i<m;i++)
{
if(A.elem[i+i+i*(A.rank-1)]==0)
for(int l=i+1;l<m;l++)
{if(A.elem[l+i+l*(A.rank-1)]!=0)
{
for(int k1=0;k1<m;k1++)
{A.elem[i+k1+i*(A.rank-1)]+=A.elem[l+k1+k1*(A.rank-1)];B.elem[i+k1+i*(B.rank-1)]+=B.elem[l+k1+l*(B.rank-1)];}
goto BB;
}}
BB: for(j=0;j<m;j++)
{
b=A.elem[j+i+j*(A.rank-1)]/A.elem[i+i+i*(A.rank-1)];
for(k=0;k<m;k++)
if(i!=j)
{
A.elem[j+k+j*(A.rank-1)]-=b*A.elem[i+k+i*(A.rank-1)];
B.elem[j+k+j*(B.rank-1)]-=b*B.elem[i+k+i*(B.rank-1)];
}
}
}
for(i=0;i<m;i++)
{
b=A.elem[i+i+i*(A.rank-1)];
if(fabs(b)<0.000000001) goto ss;
for(j=0;j<m;j++)
{
A.elem[i+j+i*(A.rank-1)]/=b;
B.elem[i+j+i*(B.rank-1)]/=b;
}
}
return 1;
ss:return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -