我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++实现对象化的矩阵相乘小程序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++实现对象化的矩阵相乘小程序

复习数学1的线性代数,矩阵相乘这块有点晕,想编个C++对象化的矩阵相乘小程序。

相乘部分


void sum(juzhen a, juzhen b, juzhen &c)
{
 int s=0;
 for (int i = 1; i <= a.m1(); i++)//A矩阵的M
  for (int j = 1; j <= b.n1(); j++)//B矩阵的S
  {
   for (k0 = 1; k0 <= a.n1(); k0++)//a.n1也就是b.m1(a的n,b的n)【行向量*列向量】
   {
    s += a.read(i,k0)*b.read(k0,j);
   }
    c.write(i, j, s);
    s = 0;
  }
}

公式:

代码中的头两个for循环就是i,j的。公式中的k从1到p求和就是里面的k0的for循环。

容易出现误解的就是公式中只是表示第“[i][j]”元素,而不是整个矩阵,整个矩阵的结果需要外面的两个for循环。

本质:这就是个p维向量(高中就记2维)的两向量相乘公式而已【结果为数,是新矩阵的一个元素】

可运行代码:


#include<iostream>
#include <string>
using namespace std;
 
class juzhen
{
private:
 int m,n;//长宽
 int num[10][10] = {0};
 string name;
 
public:
  void size(int a,int b)
  { m = a;
  n = b; }
  void set()
  {
   cout << "此矩阵规模:" << this->m <<","<< this->n << endl;//=====?
   for (int i = 1; i <= this->m; i++)
    for (int j = 1; j <= this->n; j++)
    {
     cin >> this->num[i][j];
    }
   cout << "输入完成"<< endl;
  }
  void display()
  {
   for (int i = 1; i <= this->m; i++)//===i为行号(第几行),j为列号
    for (int j = 1; j <= this->n; j++)
    {
     cout << this->num[i][j] << " ";
    if (j == this->n) cout << endl;//先输出再换行
    }
  }
  int read(int a, int b) { return num[a][b]; }//调用此函数,得[m][n]元素的值
  void write(int a, int b,int count) {  num[a][b]=count; }//第三个参数的值,传递给[a][b]元素
  int m1() { return m; }//调用得到矩阵的m
  int n1() { return n; }//调用得到矩阵的n
};
 
int m0, n0, s0, k0;//矩阵规模(容易搞混的东西)
 
void sum(juzhen a, juzhen b, juzhen &c)//矩阵相乘公式所在。。。【要改实参值的要用&引用】
{
 for (int i = 1; i <= a.m1(); i++)//A矩阵的M
  for (int j = 1; j <= b.n1(); j++)//B矩阵的S
  {
 
   int s = 0;
   for (k0 = 1; k0 <= a.n1(); k0++)//a.n1也就是b.m1(a的n,b的n)【行向量*列向量】
   {
    s += a.read(i,k0)*b.read(k0,j);//因为用了C++,所以没那么直观,就是a[i][k]*b[k][j],套个for循环求累加和(就是高中时向量的点乘)
   }
    c.write(i, j, s);
  }
}
int main()
{
 juzhen A,B,C;
 cout << "设定m,s,n。A的m*s,B的s*n(横条数*纵条数)"<<endl;
 cin >> m0>> s0>> n0;
 A.size(m0, s0);
 B.size(s0, n0);
 
 C.size(m0, n0);
 
 A.set();
 B.set();
 
 sum(A, B, C);//C=A*B
 cout << "结果C的m*n:" << endl;
 C.display();
 
 return 0;
}

样例输入及输出:

1 0          1 0           1 0
0 1      *   0 1      =   0 1

如图所示两个矩阵

懒得打了……就如图所示两个矩阵

PS:函数中形参引用真好用,过去一直不知道,省得用指针了。(不然改不了C矩阵的实际元素值)


void sum(juzhen a, juzhen b, juzhen &c) 
//矩阵相乘公式所在。。。【要改实参值的要用&引用】

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++实现对象化的矩阵相乘小程序

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java 矩阵乘法的mapreduce程序实现

java 矩阵乘法的mapreduce程序实现map函数:对于矩阵M中的每个元素m(ij),产生一系列的key-value对<(i,k),(M,j,m(ij))>其中k=1,2.....知道矩阵N的总列数;对于矩阵N中的每个元素n(jk),
2023-05-31

C#实现对象的序列化和反序列化

这篇文章介绍了C#实现对象序列化和反序列化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

C#中怎么实现JSON功能及对象的序列化和反序列化

本篇内容主要讲解“C#中怎么实现JSON功能及对象的序列化和反序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中怎么实现JSON功能及对象的序列化和反序列化”吧!Newtonsoft.J
2023-06-03

在Java中,如何实现对象的序列化与反序列化?(请描述Java对象序列化和反序列化的过程及其用途。)

Java对象的序列化是一种将对象转换为二进制流的过程,用于存储或传输。反序列化则是将二进制流还原为对象的逆过程。序列化过程包括将对象状态和类型信息写入二进制流,而反序列化过程从二进制流中读取信息并重建对象。Java序列化和反序列化广泛用于持久化、网络传输、轻量级通信、配置管理和缓存。可序列化的对象必须实现java.io.Serializable接口,并可定义serialVersionUID字段以确保跨版本兼容性。
在Java中,如何实现对象的序列化与反序列化?(请描述Java对象序列化和反序列化的过程及其用途。)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录