矩阵的乘法运算

Posted luoqingci

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵的乘法运算相关的知识,希望对你有一定的参考价值。

线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时,为一个列向量。
建立一个整数矩阵类matrix,其私有数据成员如下:

int row;
int column;
int **mat;
 

建立该整数矩阵类matrix构造函数;
建立一个 *(乘号)的运算符重载,以便于对两个输入矩阵进行乘法运算;
建立输出函数void display(),对整数矩阵按行进行列对齐输出,格式化输出语句如下:

cout<<setw(10)<<mat[i][j];
//需要#include <iomanip>
 

主函数里定义三个整数矩阵类对象m1、m2、m3.
###输入格式:
分别输入两个矩阵,分别为整数矩阵类对象m1和m2。
每个矩阵输入如下:
第一行两个整数 r c,分别给出矩阵的行数和列数
接下来输入r行,对应整数矩阵的每一行
每行输入c个整数,对应当前行的c个列元素
###输出格式:
整数矩阵按行进行列对齐(宽度为10)后输出
判断m1和m2是否可以执行矩阵相乘运算。
若可以,执行m3=m1*m2运算之后,调用display函数,对m3进行输出。
若不可以,输出"Invalid Matrix multiplication!"
提示:输入或输出的整数矩阵,保证满足row>=1和column>=1。

代码实现

#include<iostream>
#include <iomanip>
using namespace std;
class Matrix

public:
Matrix(int, int);
~Matrix();
friend istream& operator>>(istream&is, Matrix&a);
int getRow()return row;
int getColum()return column;
friend Matrix operator*(Matrix&, Matrix&);
Matrix(const Matrix&);
void display();
private:
int row;
int column;
int** mat;
;
Matrix::Matrix(int r, int c)

row = r;
column = c;
mat = new int*[r+2];
for(int i = 0; i < row+2; i++)

mat[i] = new int[c+2];


Matrix::~Matrix()

for(int i = 0; i <row+2; i++)
delete []mat[i];
delete []mat;

istream& operator>>(istream & is, Matrix & a)
for(int i=0; i<a.row; i++)

for(int j=0; j<a.column; j++)

is>>a.mat[i][j];



Matrix operator*(Matrix&a, Matrix&b)
int i,j,k,x;
if(a.row==1&&a.column==1)

Matrix p (b.row,b.column);
for(i=0;i<b.row;i++)
for(j=0;j<b.column;j++)
p.mat[i][j]=a.mat[0][0]*b.mat[i][j];


return p;

else

Matrix p (a.row,b.column);
for(i=0; i<a.row; i++)

for(j=0; j<b.column; j++)

x=0;
for(k=0; k<a.column; k++)

x+=a.mat[i][k]*b.mat[k][j];

p.mat[i][j]=x;


return p;


Matrix::Matrix(const Matrix&p)
this->row=p.row;
this->column=p.column;
this->mat=new int* [p.row+2];
int i,j;
for(i=0; i<p.row+2; i++)

this->mat[i]=new int [p.column+2];
for(j=0; j<p.column; j++)

this->mat[i][j]=p.mat[i][j];



void Matrix::display()
for(int i=0; i<row; i++)

for(int j=0; j<column; j++)

cout<<setw(10)<<mat[i][j];

cout<<endl;


int main()

int a,b,i,j;
cin>>a>>b;
Matrix x(a,b);
cin>>x;
cin>>a>>b;
Matrix y(a,b);
cin>>y;
if(x.getColum()==y.getRow()||x.getColum()==1&&x.getRow()==1||y.getRow()==1&&y.getRow()==1)

Matrix z=x*y;
z.display();
else
cout<<"Invalid Matrix multiplication!"<<endl;

return 0;

三维矩阵的运算规则是怎么样的? 包括加法,减法,乘法

参考技术A 一般意义的矩阵是二维的,当然,你可以根据你的需要定义三维矩阵,至于运算规则,也是根据的你的需要定的.
比如说,加法定义为其中对应元素之积,乘法定义为对应元素之积.

以上是关于矩阵的乘法运算的主要内容,如果未能解决你的问题,请参考以下文章

三维矩阵的运算规则是怎么样的? 包括加法,减法,乘法

矩阵的乘法运算

DSP矩阵运算-放缩,乘法和转置矩阵

矩阵的乘法运算

Python进行矩阵的乘法运算

深度学习7-矩阵乘法运算的反向传播求梯度