【基础算法】矩阵的几种基本运算 & C++实现

简介: 从线性代数中我们已知,两个矩阵可以进行加减乘运算,但矩阵之间没有除法运算。

●矩阵的加减乘(数乘)转置运算


       从线性代数中我们已知,两个矩阵可以进行加减乘运算,但矩阵之间没有除法运算。(下面以3×3矩阵为例):

5417a3096888b8900e9607f9919df8f9_96312207d6af40519c5172d6cdc7feaa.png


        矩阵的数乘运算类属与两矩阵相乘的一种特殊形式(数乘矩阵的这个数,我们可以将其化为对角线为该数,其余位置都为0的矩阵,再用该对角矩阵乘我们要乘的这个矩阵)直接用数乘以矩阵中的每一个数即可。转置矩阵为将矩阵的行列互换得到的新矩阵称为转置矩阵,转置矩阵的行列式不变。下面我们展示数乘和转置两个算法的关键代码片段:


{
  double juzhen[3][3] = { {1,2,3},
        {4,5,6},
        {7,8,9} };  
  double n;cin >> n;
  for (int i = 0; i < 3; i++)
  for (int j = 0; j < 3; j++)
    juzhen[i][j] = n * juzhen[i][j];
}
{
  double juzhen[3][3] = { {1,2,3},
        {4,5,6},
        {7,8,9} };  
  for (int i = 0; i < 3; i++)
  for (int j = 0; j < 3; j++)
    jizhen[j][i] = juzhen[i][j];
}

在下面代码中我们输入了两个矩阵让其进行运算(只进行加减乘)


#include<iostream>
#define i 3   //定义矩阵的行数
#define j 3   //定义矩阵的列数
using namespace std;
class juzhen {
public:
  void clear()  //将矩阵清空
  {
  this->c[i][j] = { 0 };
  }
  void add();   //相加算法
  void sub();   //相减算法
  void mul();   //相乘算法
  void showresult();
  double a[i][j];
  double b[i][j];
  double c[i][j];
};
void juzhen::add()
{
  for (int m = 0; m < i; m++)
  {
  for (int n = 0; n < j; n++)
  {
    c[m][n] = a[m][n] + b[m][n];
  }
  }
}
void juzhen::sub()
{
  for (int m = 0; m < i; m++)
  {
  for (int n = 0; n < j; n++)
  {
    c[m][n] = a[m][n] - b[m][n];
  }
  }
}
void juzhen::mul()
{
  for (int m = 0; m < i; m++)
  {
  int p = 0;
  for (int n = 0; n < j; n++)
  {
    int q = 0;
    c[m][n] = a[m][p] * b[q][n]
    + a[m][p + 1] * b[q + 1][n]
    + a[m][p + 2] * b[q + 2][n];
    //c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]
    //c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]
    //c[0][2]=a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]
    //...
  }
  }
}
void juzhen::showresult()
{
  for (int m = 0; m < i; m++)
  {
  for (int n = 0; n < j; n++)
  {
    cout << c[m][n] << " ";
  }
  cout << endl;
  }
}
juzhen jz;
void text()  //写入矩阵
{
  cout << "请输入这两个" << i << "×" << j << "矩阵:" << endl;
  cout << "①" << endl;
  for (int m = 0; m < i; m++)
  for (int n = 0; n < j; n++)
    cin >> jz.a[m][n];
  cout << "②" << endl;
  for (int m = 0; m < i; m++)
  for (int n = 0; n < j; n++)
    cin >> jz.b[m][n];
}
void text1()   //加法运算
{
  jz.clear();
  jz.add();
  cout << "两矩阵相加为:" << endl;
  jz.showresult();
}
void text2()   //减法运算
{
  jz.clear();
  jz.sub();
  cout << "两矩阵相减为:" << endl;
  jz.showresult();
}
void text3()   //乘法运算
{
  jz.clear();
  jz.mul();
  cout << "两矩阵相乘为:" << endl;
  jz.showresult();
}
int main()
{
  text();
  text1();
  text2(); 
  text3();  
}

4f9f52d6fd03fd57cdf95e1030ccc488_2258f2d4233a4f11b102a1934df87cb0.png

        综合上面的讲解及其程序代码,我们可以将加、减、乘、数乘、转置这几种基本运算的方法充分结合,运用线性代数中矩阵运算的基本公式,在程序中从而实现多个矩阵复合运算的复杂算法。


目录
相关文章
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
253 2
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
394 15
|
存储 算法 数据处理
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
309 17
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
1065 77
|
11月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
274 0
|
机器学习/深度学习 存储 算法
基于 C++ 布隆过滤器算法的局域网上网行为控制:URL 访问过滤的高效实现研究
本文探讨了一种基于布隆过滤器的局域网上网行为控制方法,旨在解决传统黑白名单机制在处理海量URL数据时存储与查询效率低的问题。通过C++实现URL访问过滤功能,实验表明该方法可将内存占用降至传统方案的八分之一,查询速度提升约40%,假阳性率可控。研究为优化企业网络管理提供了新思路,并提出结合机器学习、改进哈希函数及分布式协同等未来优化方向。
339 0
|
存储 监控 算法
基于 C++ 哈希表算法的局域网如何监控电脑技术解析
当代数字化办公与生活环境中,局域网的广泛应用极大地提升了信息交互的效率与便捷性。然而,出于网络安全管理、资源合理分配以及合规性要求等多方面的考量,对局域网内计算机进行有效监控成为一项至关重要的任务。实现局域网内计算机监控,涉及多种数据结构与算法的运用。本文聚焦于 C++ 编程语言中的哈希表算法,深入探讨其在局域网计算机监控场景中的应用,并通过详尽的代码示例进行阐释。
281 4
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
308 8
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
311 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨

热门文章

最新文章