当前位置:文档之家› 矩阵程序

矩阵程序

1.采用面向对象的程序设计方法实现矩阵的加、减、乘运算。

(1)该库最大的特点是能够像MATLAB一样容易的做矩阵合并,取子矩阵运算。
以下是一个demo:
matrix a=matrix::unit(4); //4阶单位阵。
matrix c(a);
a(1,2)=2; //此时矩阵a的副本c任然不变。
cout<c=a; //此时c是a的一个副本。
a(2,1,false)=10; //此时矩阵所有的副本(比如c)都会改变,如果确定矩阵没有副本使用此方法可以提升速度。
cout<cout<matrix b(a(1)*a(_ALL,2)); //矩阵a的第一行乘以矩阵的第二列,结果赋给b。相当于MATLAB语句:b=a(1,:)*a(:,2)。
cout<_index id1,id2; //_index类型继承自vector,用来表示子矩阵取自原矩阵的那些行(列)。
id1.push_back(1);
id1.push_back(2);
id2.push_back(3);
id2.push_back(4);
a(id1)+=a(id2); //将三、四行构成的子矩阵加到一、二行。相当于MATLAB语句:a(1:2,:)=a(1:2,:)+a(3:4,:)。
cout<b=(b|b|b|b)&a; //将四个b纵向合并构成的矩阵横向合并a,赋给b。相当于MATLAB语句:b=[[b;b;b;b],a]。
cout<b.swap_col(2,3); //交换b的二、三列。
cout<
(2)
#include
#include
#include
using namespace std;
class matrix
{
public:
matrix(matrix ©);
matrix(const int x,const int y);
~matrix();
friend matrix operator + (matrix m1,matrix m2);
friend matrix operator - (matrix m1,matrix m2);
int getl(){return lines;}
int getr(){return rows;}
void print(void);
void input(void);
private:
int lines;
int rows;
int **array;
friend void add (matrix a,matrix b,matrix& c);
friend void minus (matrix a,matrix b,matrix& c);

};
matrix::matrix(int x,int y)
{
lines=x;
rows=y;
array=(int **)malloc (sizeof(int*)*x);
for(int i=0;iarray[i]=(int *)malloc ((sizeof(int))*y);
}
matrix::matrix(matrix &x)
{
lines=x.lines;
rows=x.rows;
array=(int **)malloc (sizeof(int *)*(x.lines));
int i,j;
for(i=0;iarray[i]=(int *)malloc ((sizeof(int))*(x.rows));

for(i=0;ifor(j=0;jarray[i][j]=x.array[i][j];
}
matrix::~matrix()
{
for (int i=0; ifree(array[i]);
free (array);
}
void matrix::input(void)
{
for(int j=0;j<=rows-1;j++)
for(int i=0;i<=lines-1;i++)
cin>>array[i][j];
}
void matrix::print(void)
{
int i,j;
for(j=0;j<=rows-1;j++)
{
for(i=0;i<=lines-1;i++)
cout<cout<<"\n";
}
}
void add (matrix a,m

atrix b,matrix& c)
{
for(int j=0;j<=c.rows-1;j++)
for(int i=0;i<=c.lines-1;i++)
c.array[i][j]=a.array[i][j]+b.array[i][j];
}
void minus (matrix a,matrix b,matrix& c)
{
for(int j=0;j<=c.rows-1;j++)
for(int i=0;i<=c.lines-1;i++)
c.array[i][j]=a.array[i][j]-b.array[i][j];

}
matrix operator + (matrix m1,matrix m2)
{
matrix temp(m1);
add (m1,m2,temp);
/*for(int j=0;j<=temp.rows-1;j++)
for(int i=0;i<=temp.lines-1;i++)
temp.array[i][j]=array[i][j]+m1.array[i][j];*/
return temp;
}
matrix operator - (matrix m1,matrix m2)
{
matrix temp(m1);
minus (m1,m2,temp);
/*for(int j=0;j<=temp.rows-1;j++)
for(int i=0;i<=temp.lines-1;i++)
temp.array[i][j]=array[i][j]-m1.array[i][j];*/
return temp;
}
int main (void)
{
int l,r;
cout<<"请依次次输入矩阵的列数与行数:\n";
cin>>l>>r;
matrix A1(l,r);
matrix A2(l,r);
matrix A3(l,r);
cout<<"请输入第一个矩阵:\n";
A1.input();
cout<<"请输入第二个矩阵:\n";
A2.input();
A3 = A1 + A2;
//add(A1,A2,A3);
A3.print();
cout<<"\n";
A3 = A1 - A2;
//minus(A1,A2,A3);
A3.print();
cout<<"\n";

cout<<"请依次次输入矩阵的列数与行数:\n";
cin>>l>>r;
matrix * pA1=new matrix(l,r);
matrix * pA2=new matrix(l,r);
matrix * pA3=new matrix(l,r);

cout<<"请输入第一个矩阵:\n";
(*pA1).input();
cout<<"请输入第二个矩阵:\n";
(*pA2).input();
A3=A1+A2;
//add(*pA1,*pA2,*pA3);
(*pA3).print();
cout<<"\n";
A3=A1-A2;
//minus(*pA1,*pA2,*pA3);
(*pA3).print();
cout<<"\n";

delete pA1;
delete pA2;
delete pA3;

system("pause");
return 0;
}


(33)3

#include
#include
#include
using namespace std;
class matrix
{
public:
matrix(matrix ©);
matrix(const int x,const int y);
~matrix();
friend matrix operator + (matrix m1,matrix m2);
friend matrix operator - (matrix m1,matrix m2);
int getl(){return lines;}
int getr(){return rows;}
void print(void);
void input(void);
private:
int lines;
int rows;
int **array;
friend void add (matrix a,matrix b,matrix& c);
friend void minus (matrix a,matrix b,matrix& c);

};
matrix::matrix(int x,int y)
{
lines=x;
rows=y;
array=(int **)malloc (sizeof(int*)*x);
for(int i=0;iarray[i]=(int *)malloc ((sizeof(int))*y);
}
matrix::matrix(matrix &x)
{
lines=x.lines;
rows=x.rows;
array=(int **)malloc (sizeof(int *)*(x.lines));
int i,j;
for(i=0;iarray[i]=(int *)malloc ((sizeof(int))*(x.rows));

for(i=0;ifor(j=0;jarray[i][j]=x.a

rray[i][j];
}
matrix::~matrix()
{
for (int i=0; ifree(array[i]);
free (array);
}
void matrix::input(void)
{
for(int j=0;j<=rows-1;j++)
for(int i=0;i<=lines-1;i++)
cin>>array[i][j];
}
void matrix::print(void)
{
int i,j;
for(j=0;j<=rows-1;j++)
{
for(i=0;i<=lines-1;i++)
cout<cout<<"\n";
}
}
void add (matrix a,matrix b,matrix& c)
{
for(int j=0;j<=c.rows-1;j++)
for(int i=0;i<=c.lines-1;i++)
c.array[i][j]=a.array[i][j]+b.array[i][j];
}
void minus (matrix a,matrix b,matrix& c)
{
for(int j=0;j<=c.rows-1;j++)
for(int i=0;i<=c.lines-1;i++)
c.array[i][j]=a.array[i][j]-b.array[i][j];

}
matrix operator + (matrix m1,matrix m2)
{
matrix temp(m1);
add (m1,m2,temp);
/*for(int j=0;j<=temp.rows-1;j++)
for(int i=0;i<=temp.lines-1;i++)
temp.array[i][j]=array[i][j]+m1.array[i][j];*/
return temp;
}
matrix operator - (matrix m1,matrix m2)
{
matrix temp(m1);
minus (m1,m2,temp);
/*for(int j=0;j<=temp.rows-1;j++)
for(int i=0;i<=temp.lines-1;i++)
temp.array[i][j]=array[i][j]-m1.array[i][j];*/
return temp;
}
int main (void)
{
int l,r;
cout<<"请依次次输入矩阵的列数与行数:\n";
cin>>l>>r;
matrix A1(l,r);
matrix A2(l,r);
matrix A3(l,r);
cout<<"请输入第一个矩阵:\n";
A1.input();
cout<<"请输入第二个矩阵:\n";
A2.input();
A3 = A1 + A2;
//add(A1,A2,A3);
A3.print();
cout<<"\n";
A3 = A1 - A2;
//minus(A1,A2,A3);
A3.print();
cout<<"\n";

cout<<"请依次次输入矩阵的列数与行数:\n";
cin>>l>>r;
matrix * pA1=new matrix(l,r);
matrix * pA2=new matrix(l,r);
matrix * pA3=new matrix(l,r);

cout<<"请输入第一个矩阵:\n";
(*pA1).input();
cout<<"请输入第二个矩阵:\n";
(*pA2).input();
A3=A1+A2;
//add(*pA1,*pA2,*pA3);
(*pA3).print();
cout<<"\n";
A3=A1-A2;
//minus(*pA1,*pA2,*pA3);
(*pA3).print();
cout<<"\n";

delete pA1;
delete pA2;
delete pA3;

system("pause");
return 0;
}


0 我要推荐

(44)



#include
#include
const int m=2; //设定的行数
const int n=3; //设定的列数
class matrix //矩阵类
{
private: int mem[m][n];
public:
matrix(); //无参构造函数
matrix(int a[m][n]); //含参构造函数
friend matrix operator+(matrix &a,matrix &b); //运算符加重载
friend matrix operator-(matrix &a,matrix &b); //运算符减重载
friend matrix operator*(matrix &a,matrix &b); //运算符乘重载
void dis

play(); //显示函数
};
matrix::matrix() //无参时设定为零矩阵
{
for(int i=0;ifor(int j=0;jmem[i][j]=0;
}
matrix::matrix(int a[m][n]) //有参时将矩阵赋值
{
for(int i=0;ifor(int j=0;jmem[i][j]=a[i][j];
}
matrix operator +(matrix &a,matrix &b) //加号重载时将要相加的两个矩阵的元//素依次相加后赋给第三个类并把第三个类返回
{
matrix c;
int i,j;
for(i=0;ifor(j=0;jc.mem[i][j]=a.mem[i][j]+b.mem[i][j];
return c;
}
matrix operator -(matrix &a,matrix &b) //减号重载时将要相减的两个矩阵
//的元素依次相减后赋给第三个类并把第三个类返回
{
matrix c;
int i,j;
for(i=0;ifor(j=0;jc.mem[i][j]=a.mem[i][j]-b.mem[i][j];
return c;
}
matrix operator *(matrix &a,matrix &b) //乘号重载时将要相乘的两个矩阵的元素
//相乘后赋给第三个矩阵并把它返回
{
matrix c;
int i,j,k;
for(i=0;ifor(k=0;kfor(j=0;jc.mem[i][k]+=a.mem[i][j]*b.mem[j][k];//乘积的结果赋给第三个矩阵的某一个元素
return c;
}
void matrix::display()
{
int i,j;
for(i=1;i{
cout<<" ";
for(j=1;j{
cout<if(j==n) //如果等于列数则换行
cout<}
}
}
void main()
{
int a[m][n],b[m][n];
int i=0,j=0;
cout<<"输入第一个矩阵X:"<cout<<"*********************************"<for(i=0;ifor(j=0;jcin>>a[i][j];
cout<<"********************************"<cout<<"输入第二个矩阵Y:"<for(i=0;ifor(j=0;jcin>>b[i][j];
cout<<"*******************************"<matrix x(a),y(b);
cout<<"x="<x.display();
cout<<"*******************************"<cout<<"y="<y.display();
cout<<"********************************"<cout<<"x+y="<(x+y).display();
cout<<"********************************"<cout<<"x-y="<(x-y).display();
cout<<"********************************"<cout<<"x*y="<(x*y).display();
cout<<"********************************"<}




相关主题
文本预览
相关文档 最新文档