[C++/PTA] 矩阵的乘法运算

这篇具有很好参考价值的文章主要介绍了[C++/PTA] 矩阵的乘法运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目要求

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

输入样例:

4  5
1 0 0 0 5
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
5  5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 8 9
5 6 7 8 9

输出样例:

    26        32        38        44        50
     4         6         8        10        12
     9        12        15        18        21
    16        20        24        32        36

解题思路

首先创建一个矩阵类 matrix,然后定义矩阵的行数 row、列数 column 和矩阵元素 mat,并在类中定义矩阵的构造函数、输入函数 get()、输出函数 display()、判断两个矩阵能否相乘的友元函数 judge() 和矩阵乘法运算符operator*()

  1. 定义矩阵类 matrix,其中包含矩阵的行数 row、列数 column 和元素 mat。矩阵的构造函数可以不用定义什么操作,因为默认初始化时行列数都为0,指向元素的指针也为空,不会影响后续使用。

  2. 在类中定义输入函数 get(),用于输入矩阵的行数、列数和元素,并将其存储到类的私有成员变量中。在函数内部可以使用二维数组动态分配内存,确保输入的数据能够正确存储。

  3. 在类中定义输出函数 display(),用于输出矩阵的元素。在输出时可以使用 setw() 控制输出宽度,使矩阵能够更加美观地显示出来。

  4. 在类外定义判断两个矩阵能否相乘的友元函数 judge(),用于判断两个矩阵是否符合矩阵乘法的条件。即第一个矩阵的列数必须等于第二个矩阵的行数才能相乘,否则无法进行矩阵乘法。
    注意,如果其中一个矩阵是 1×11×1 矩阵,那么它也可以和任何一个矩阵相乘。

  5. 在类外定义矩阵乘法运算符 operator*(),使用友元函数的形式重载运算符。在运算符内部,首先判断第一个矩阵是否是 1×11×1 矩阵,如果是,则直接针对第二个矩阵进行乘法操作;否则,根据矩阵乘法的定义循环遍历计算每个元素的值,并存储到一个新的矩阵中。

  6. 在主函数 main() 中,首先通过输入参数创建两个矩阵对象 m1 和 m2,然后调用 judge() 函数判断它们是否能够相乘。如果可以,则调用矩阵乘法运算符 operator*() 计算它们的乘积,并将结果保存到另一个矩阵对象 m3 中,最后使用 display() 函数输出 m3 的元素。

代码

#include<iostream>
#include<iomanip>
using namespace std;
class matrix{
 private:
  int row;     
  int column;
  int **mat;       
 public:
  matrix(int a=0,int b=0):row(a),column(b){};   
  void get(int ,int);     
  void display();        
  friend bool judge(const matrix &a,const matrix &b);   
    friend matrix operator*(const matrix &a,const matrix &b);  
};
void matrix::get(int a,int b){  
 int v,q;
 row=a;                
 column=b;
 mat=new int*[a];
 for(v=0;v<a;v++){       
  mat[v]=new int[b];
 }
 for(v=0;v<row;v++){
  for(q=0;q<column;q++){
   cin>>mat[v][q];
  }
 }
}
bool judge(const matrix &a,const matrix &b){
 if(a.column==b.row||a.column==1&&a.row==1){   
  return true;                              
 }else{                                     
     return false;
 }
}
void matrix::display(){
    int v,q;
    for(v=0;v<row;v++){
     for(q=0;q<column;q++){
      cout<<setw(10)<<mat[v][q];
  }
  cout<<endl;         
 }
}
matrix operator*(const matrix &a,const matrix &b){
 matrix c;
 int v=0,q=0,k=0,l=0,sum=0;
 if(a.column==1&&a.row==1){     
  c.row=b.row;
  c.column=b.column;
  c.mat=new int*[b.row];
 for(v=0;v<b.row;v++){
  c.mat[v]=new int[b.column];
 }
 for(v=0;v<b.row;v++){
  for(q=0;q<b.column;q++){    
   c.mat[v][q]=a.mat[0][0]*b.mat[v][q];
  }
 }
 }else{
 c.row=a.row;       
 c.column=b.column;
 c.mat=new int*[a.row];
 for(v=0;v<a.row;v++){
  c.mat[v]=new int[b.column];
 }
 for(v=0;v<a.row;v++){
  for(q=0;q<b.column;q++){   
   for(k=0;k<a.column;k++){
   sum+=a.mat[v][k]*b.mat[k][q]; 
   }
   c.mat[v][q]=sum;
   sum=0;
  }
 }
 }
 return c;
}
int main(){         
 matrix m1,m2,m3;
 int a,b;
 cin>>a>>b;
 m1.get(a,b);
 cin>>a>>b;
 m2.get(a,b);
 if(judge(m1,m2)){
  m3=m1*m2;
  m3.display();
 }else{
  cout<<"Invalid Matrix multiplication!"<<endl;
 }
 return 0;
}

总结

该题考察矩阵乘法的基本概念,例如如何判断两个矩阵是否能够相乘如何实现矩阵乘法的核心计算操作等,读者可躬身实践。
我是秋说,我们下次见。文章来源地址https://www.toymoban.com/news/detail-764174.html

到了这里,关于[C++/PTA] 矩阵的乘法运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 14-矩阵相乘及其运算法则

    矩阵与向量的乘法 在这一篇文章中我们就将基于上一篇重新审视矩阵的这个视点来理解矩阵的乘法,那么在这一篇,我们主要来看一下矩阵和向量的乘法。这里这个线性方程组是上一小节给大家举的模拟的一个非常简单的小型经济系统的例子,我们可以把这个经济系统其实本

    2024年02月13日
    浏览(40)
  • 【C++刷题集】-- day5

    目录 选择题 单选 编程题 统计回文⭐ 【题目解析】 【解题思路 - 穷举】 【优化】 连续最大和⭐ 【题目解析】 【解题思路】 【空间优化】 1、 在上下文和头文件均正常情况下,以下程序的输出结果是  ( ) 1 无任何输出 2 陷入死循环 正确答案: 解析: do while循环是先执行

    2024年02月14日
    浏览(36)
  • C语言数据结构课设:矩阵的运算(转置.求和.求差.矩阵相乘.求逆.数乘),文件读取矩阵

      #include stdio.h #include string.h #includestdlib.h #includemath.h // 定义一个结构体类型,表示一个矩阵 typedef struct matrix {     int nrow; // 矩阵的行数     int ncol; // 矩阵的列数     double data[10][10]; // 矩阵的数据,最大为 10 x 10 } matrix; // 定义一个函数,用于显示一个矩阵的内容  void dis

    2024年03月27日
    浏览(55)
  • 矩阵乘法实现卷积运算

            矩阵根据卷积核的大小进行,从左到右、从上到i 下 的移动,对应数据相乘再相加得到的数据为该区域的值。 ​​​​​​​ ​​​​​​​         原理:根据对于相乘相加的机制,发现通过对卷积核填零构成和输入矩阵大小一致的矩阵,然后展平拼接起来,

    2024年02月12日
    浏览(45)
  • 矩阵与向量的运算:矩阵的加法、数乘与乘法

    作者:禅与计算机程序设计艺术 \\\"矩阵与向量的运算\\\"是机器学习领域的一个基础课。在实际应用中,许多算法都需要涉及到矩阵运算。理解并掌握这种运算对于解决复杂的问题和优化模型性能至关重要。本文将带您快速了解矩阵的概念,以及如何进行矩阵运算。 \\\"行列式\\\"是指

    2024年02月11日
    浏览(41)
  • 在simulink中进行矩阵的乘法运算

    双击 product 选择为 Matirx 要使用 Reshape 将矩阵排列成矩阵模式 Matlab 的是按列读取向量,按列放置向量 1*4 向量或者 4*1 向量,MATLAB 都只认为是 4 维向量,而不是分别的行向量或者列向量 使用矩阵乘法,必须 reshape 重塑矩阵维度

    2024年02月11日
    浏览(43)
  • MATLAB数值计算——矩阵运算乘法、除法、乘方

    矩阵是线性代数的基本单元 矩阵含有M行N列数值 矩阵中的元素可以是实数或复数 矩阵相关的基本运算:加、减、内积、逆矩阵、转置、线性方程式、特征值、特征向量、矩阵分解 运算符: 注:矩阵的乘法运算中没有乘法交换律 运算符: * 注: x=B/A是方程x A=B的解。即x=A的逆

    2024年01月16日
    浏览(36)
  • C++两个矩阵相乘代码(内附有矩阵相乘的条件与规则,以及对代码的详细解答)

         再复制粘贴代码之前可以先了解学习一下什么是矩阵相乘,矩阵相乘的条件与规则又是什么。 点击一下链接即可进入学习:                       #矩阵相乘的学习链接          以下是两个矩阵相乘的代码块(输入版) 补充①:对于for循环了解还不够透彻的可以进

    2024年02月11日
    浏览(42)
  • 基于因特尔OneAPI实现矩阵并行乘法运算

    OneAPI介绍 Intel oneAPI 是一个跨行业、开放、基于标准的统一的编程模型,旨在提供一个适用于各类计算架构的统一编程模型和应用程序接口。其核心思想是使开发者只需编写一次代码,便可在跨平台的异构系统上运行,支持的底层硬件架构包括 CPU、GPU、FPGA、神经网络处理器以

    2024年02月04日
    浏览(37)
  • 线性代数:矩阵运算(加减、数乘、乘法、幂、除、转置)

    目录 加减 数乘  矩阵与矩阵相乘  矩阵的幂 矩阵转置  方阵的行列式  方阵的行列式,证明:|AB| = |A| |B|        

    2024年01月22日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包