首页 > 其他分享 >矩阵的乘法运算

矩阵的乘法运算

时间:2023-05-17 20:55:08浏览次数:25  
标签:row 运算 Matrix int 矩阵 column 乘法 mat

线性代数中的矩阵可以表示为一个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;
}

标签:row,运算,Matrix,int,矩阵,column,乘法,mat
From: https://www.cnblogs.com/luoqingci/p/17410225.html

相关文章

  • 2022-2023 春学期 矩阵与数值分析 C2 矩阵的变换和计算
    2022-2023春学期矩阵与数值分析C2矩阵的变换和计算原文引言本文内容来自于对矩阵与数值分析课程资料的整理;本文所涉及的课程指东北某沿海高校,计算机学院硕士生必修课“矩阵与数值分析”,课程资料包括课程PPT、教材《计算机科学计算第二版》[1],以及网络资料,师兄的笔记等。......
  • 二进制位运算应用场景
    二进制位运算目的是提高运算速度位运算只能整数除2 //a/2 inta=16; a/=2;//8 a=a>>1;//4 cout<<a<<endl;判断奇偶 //判断奇偶 intb=16; if(b%2==0){ cout<<"b是偶数"<<endl; }else{ cout<......
  • 线段树维护矩阵
    对于一些只有单点修改且维护的信息具有递推性的题目,由于运算具有结合律,可以将两区间合并写成矩阵乘法的形式,省去一些麻烦的讨论。前置知识:广义矩阵乘法对于一个\(n\timesm\)的矩阵\(A\)和一个\(m\timest\)的矩阵\(B\),定义广义矩阵乘法:\[C_{i,j}=\bigoplus_{k=1}^{m}A_......
  • C# 表达式与运算符
    3.1 表达式1.赋值表达式  由赋值运算符(=)连接起来的式子叫做赋值表达式,例如:a=a+1。变量可以重新赋值,老值不复存在。  小扩展:有一种复合赋值运算符,例如:Intnum=10;num=num+10;  可以写成:Intnum=10;num+=10; 2.算术表达式  由算术运算符(+,-,*,/,%)连接起来的式子叫做算术表达式。......
  • C# 表达式与运算符
    3.1表达式1.赋值表达式  由赋值运算符(=)连接起来的式子叫做赋值表达式,例如:a=a+1。变量可以重新赋值,老值不复存在。  小扩展:有一种复合赋值运算符,例如:Intnum=10;num=num+10;  可以写成:Intnum=10;num+=10; 2.算术表达式  由算术运算符(+,-,*,/,%)连接起来的式子叫做......
  • Javascript执行原理 网页引入javascript的三种方式* javascript核心语法 数据类型 Typ
    Javascript执行原理:用户端发送请求到服务器端将js解析出来的数据(用户身份表示)绑定在请求路径中服务器端获取到参数后会响应客户端客户端通过浏览器解析响应的数据并将数据展现在浏览器上网页引入javascript的三种方式*:使用script标签<scripttype=“text/javascript”>aler......
  • 剑指 Offer 29. 顺时针打印矩阵
    题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 限制:0<=matrix.length<=1000<=matrix[i].length <=100   classSolution{publicint[]spiralOrder(intmatrix[][]){if(matrix.length==0)returnnewint[0];......
  • 矩阵乘法
    #include <iostream>#include <iomanip>using namespace std;class matrix{private:    int row,column;    int **mat;public:    matrix(const matrix& mx){        this->row=mx.row;        this->column=mx.column;        thi......
  • Python 运算符
    1、算术运算符运算符描述实例+加-两个对象相加a+b输出结果30-减-得到负数或是一个数减去另一个数a-b输出结果-10*乘-两个数相乘或是返回一个被重复若干次的字符串a*b输出结果200/除-x除以yb/a输出结果2%取模-返回除法的余数......
  • C++ | 运算符重载
    1.运算符重载1.1基本概念函数重载(函数多态)是指用户能够定义多个名称相同但参数列表不同的函数,旨在使用户能够用同名的函数来完成相同的基本操作,即使这种操作被用于不同的数据类型。运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。实际上,很多C++(也包括C语......