C++ 矩阵

news2024/11/18 3:19:11

目录

了解矩阵的数学原理(大学线性代数)

矩阵及转置矩阵

矩阵乘法 

矩阵快速幂

相伴矩阵模板

[相伴矩阵,快速矩阵幂]CSES1722 Fibonacci Numbers


了解矩阵的数学原理(大学线性代数)

矩阵及转置矩阵

A = \begin{bmatrix} 1&2\\ 3&4 \end{bmatrix} 这里A就是一个矩阵,1, 2,3,4就是矩阵里的元素

 就是一个转置矩阵T是转置符 这个矩阵原来是 

矩阵乘法 

  这是矩阵乘法, 矩阵加法和减法简单地定义为逐个元素进行加减。注意,两个矩阵的行数、列数分别相等时,加减法才有定义。矩阵的乘法比较复杂,当A的列数等于B的行数时,则可以定义乘法C=AB。如果A是m×n矩阵,B是n×p矩阵,那么C是一个m×p矩阵,其中cik满足

如果A和B不满足要求的大小就不能够成一个矩阵C。

如果你还理解不了就看一下下面这个线性方程吧

 

可以用矩阵表示为:

 

第一个框是A(矩阵) , 第二个是x(向量, 未知数) 得出的第三个框是b(向量矩阵解)

矩阵乘法是矩阵第一列成第一个未知数

例如:
\left\{\begin{matrix} 1x + 2y + 3z = 1 \\ 1x - 2y - 3z = 10 \\ 8x + 7z = 2 \\ \end{matrix}\right. 

这是我随便写的一个方程, 用矩阵表示为:
\begin{bmatrix} 1 & 2 & 3 \\ 1 & -2 & -3\\ 8 & 0 & 7 \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ \end{bmatrix} = \begin{bmatrix} 1 \\ 10\\ 2 \end{bmatrix}

大家就知道了第一列表示x在三个方程存在的数量,第二列表示y在三个方程存在的数量, 第三列表示z在三个方程存在的数量。

矩阵快速幂

这3个矩阵分别为A, x和b(注意x和b都是n×1的矩阵,也称列向量),则线性方程组可以简单地写成Ax=b。这样是不是很方便呢?建议读者仔细研究一下这个Ax=b。它意味着A把一个列向量x变成了另外一个列向量b。也就是说,矩阵A描述的是一个线性变换,它把向量x变换到了向量b。在算法竞赛中,只要遇到“把一个向量v变成另一个向量v',并且v' 的每一个分量都是v各个分量的线性组合”的情况,就可以考虑用矩阵乘法来描述这个关系。这里的线性组合是指每个元素乘以一个常数后相加。比如2x+3y-z就是x、y、z的线性组合,但5xy和x2-3y都不是。矩阵乘法最重要的性质就是满足结合律,即(AB)C=A(BC),因此和幂取模一样,An也可以用倍增法加速。

                                                                                                           摘自: 202403-榕阳-提高组-专题基础-P05-矩阵计算 (kdocs.cn)icon-default.png?t=N7T8https://www.kdocs.cn/l/cqHzHcSMgykl

相伴矩阵模板

[相伴矩阵,快速矩阵幂]CSES1722 Fibonacci Numbers

Fibonacci Numbers - CSES 1722 - Virtual Judgeicon-default.png?t=N7T8https://vjudge.net/problem/CSES-1722

定义Fibonacci 如下:F0=1,F1=1,Fn=Fn-2+Fn-1。对于指定的n(0≤n≤10^18),计算斐波那契数列第n项的值,结果对10^9+7取模。

样例输入:

样例输出:

10

55

这是矩阵的关系式:

代码:

// CSES1722 Fibonacci Numbers
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define _for(i, a, b) for (int i = (a); i < (int)(b); ++i)
const LL P = 1e9 + 7;
using VL = vector<LL>;
struct Mat {
  int n, m;
  vector<VL> F;
  Mat(int _n, int _m) : n(_n), m(_m), F(n, VL(m)) {}
  Mat operator*(const Mat& x) const {
    assert(m == x.n);
    Mat ans(n, x.m);
    _for(r, 0, n) _for(c, 0, x.m) {
      _for(i, 0, m)(ans.F[r][c] += F[r][i] * x.F[i][c] % P) %= P;
    }
    return ans;
  }
  Mat operator^(LL k) const {
    assert(k >= 1);
    assert(n == m);
    Mat ans = *this, p = *this;
    for (--k; k; k >>= 1, p = p * p)
      if (k & 1) ans = ans * p;
    return ans;
  }
};
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  LL n, ans = -1;
  cin >> n;
  if (n == 0)
    ans = 0;
  else if (n == 1)
    ans = 1;
  else {
    Mat A(2, 2), v1(2, 1);
    A.F = {{1, 1}, {1, 0}}, v1.F = {{1}, {0}};
    Mat vn = (A ^ (n - 1)) * (v1);
    ans = vn.F[0][0];
  }
  cout << ans << "\n";
  return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1637366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pyqt 按钮常用格式Qss设置

pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS&#xff08;Cascading Style Sheets&#xff09;&#xff0c;但专门为 Qt 应用程序设计。使用 QSS&am…

2024 五一杯高校数学建模邀请赛(C题)| 煤矿深部开采冲击地压危险预测 |建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量身打造创新解决方案。小秘籍团队&#xff0c;始终引领着建模问题求解的风潮。 抓紧小秘籍&#xff0c;我们出发吧~ 让我们看看五一杯的C题&#xff01; 完…

【展会邀请】百华鞋业邀您参加2024山东省休闲旅游产业展!

2024山东省休闲旅游产业展将于4月25日—27日在临沂国际博览中心精彩亮相。本届展会由山东省旅游行业协会、山东省文化产业发展协会主办&#xff0c;山东新琅琊投资发展集团有限公司承办的2024休闲旅游产业展&#xff0c;将在临沂国际博览中心精彩亮相。山东百华鞋业将作为临沂户…

MySQL中索引的数据结构

2.3.1. 索引数据结构 索引就是能够提高查询速度的一种数据结构&#xff0c;在数据插入时就进行了排序&#xff08;会影响插入和更新的性能&#xff09;&#xff0c;索引广泛使用的是B树索引。 B树索引结构&#xff1a; 目前是基于磁盘排序效率最高的数据结构&#xff0c;树非…

Leetcode—657. 机器人能否返回原点【简单】

2024每日刷题&#xff08;121&#xff09; Leetcode—657. 机器人能否返回原点 实现代码 class Solution { public:bool judgeCircle(string moves) {int rnum 0, lnum 0, unum 0, dnum 0;for(int i 0; i < moves.size(); i) {switch(moves[i]) {case R:rnum;break;c…

Electron+Vue3+Vite+ElectronForge整合-全部ts开发 - 一键启动两个服务 一键打包两个服务

说明 本文介绍一下 Electron Vue3 Vite Electron Forge 的高级整合操作。vue3 : 使用 TS 的语法开发&#xff1b; Electron : 使用 TS 的语法开发。 补充 &#xff1a; 目前Electron的开发还是以JS为主&#xff0c;不过我们可以直接使用TS开发&#xff0c;在执行和打包时&a…

MaskFormer

This repository has been archived by the owner on Aug 30, 2023. It is now read-only.不建议复现

linux系统的rsync命令实现本机到远程主机之间目录的复制和同步

一、rsync命令介绍 在Linux中&#xff0c;rsync 是一个强大的命令行工具&#xff0c;用于同步文件和目录。它可以在本地或通过网络在远程系统之间复制文件。 二、远程目录复制的条件 1、系统要已经安装rsync工具 要使用 rsync 复制远程目录&#xff0c;需要确保系统上安装了 …

高效率的做事方法?

高效率的做事方法可以帮助我们更好地管理时间和资源&#xff0c;以下是一些建议&#xff1a; 1.明确目标和计划&#xff1a; 在开始任何任务之前&#xff0c;先明确你的目标是什么。 制定一个详细的计划&#xff0c;包括步骤、时间表和预期结果。 将任务分解成小块&#xff0…

浅谈Agent AI智能体的未来

Agent AI智能体的未来非常广阔和潜力巨大。随着技术的发展和应用场景的不断拓展&#xff0c;我们可以期待以下几个方面的发展&#xff1a; 更加智能化&#xff1a;Agent AI智能体将会变得越来越智能&#xff0c;具备更强大的学习、推理和决策能力。它们可以通过大数据和机器学习…

修改word文件的创作者方法有哪些?如何修改文档的作者 这两个方法你一定要知道

在数字化时代&#xff0c;文件创作者的信息往往嵌入在文件的元数据中&#xff0c;这些元数据包括创作者的姓名、创建日期以及其他相关信息。然而&#xff0c;有时候我们可能需要修改这些创作者信息&#xff0c;出于隐私保护、版权调整或者其他实际需求。那么&#xff0c;有没有…

Linux系统启动Canal错误

说明&#xff1a;记录在Linux系统&#xff08;Cent OS 7&#xff09;中使用Canal的错误&#xff1b; 场景 将下载的Canal包解压&#xff0c;启动Canal时&#xff0c;Canal没有启动&#xff0c;如下&#xff1a; 分析&#xff1a;hs_err_pid13418.log是JVM运行异常生成的日志文…

SDKMAN!

概述 官网&#xff0c;SDKMAN是一款管理多版本SDK的工具&#xff0c;可以实现在多个版本间的快速切换。 其他特性&#xff1a; 易用&#xff1a;安装SDK不再需要去Google想安装的某个软件的官网的下载页&#xff0c;或找其他下载页面&#xff0c;然后下载安装包、解压、设置…

Apollo Dreamview+之播放离线数据包

前提条件 完成 Dreamview 插件安装&#xff0c;参见 Studio 插件安装 。 操作步骤 您可以通过包管理和源码两种方式快速体验离线数据包播放操作。其中进入 docker 环境和启动 dreamview 的命令有所区别&#xff0c;请您按照命令进行操作。 步骤一&#xff1a;启动并打开 Dr…

踏上R语言之旅:解锁数据世界的神秘密码(三)

多元相关与回归分析及R使用 文章目录 多元相关与回归分析及R使用一.变量间的关系分析1.两变量线性相关系数的计算2.相关系数的假设检验 二.一元线性回归分析的R计算三、回归系数的假设检验总结 一.变量间的关系分析 变量间的关系及分析方法如下&#xff1a; 1.两变量线性相关…

openlayer 使用ol-ext插件实现凸显区域

使用ol-ext插件实现凸显多变形 效果如图 1、创建openlayer var map; var view; var tileLayer, source, vector;function init() {tileLayer new ol.layer.Tile({source: new ol.source.TileArcGISRest({url: "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStr…

java 远程debug

java -agentlib:jdwptransportdt_socket,servery,suspendn,address50050 -Xmx1536m -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./ -jar ${JAR_NAME} >/dev/null 2>&1 &参数说明 -agentlib:jdwptransportdt_socket,servery,suspendn,address50050: 这个参数…

Linux:使用匿名管道对进程池的模拟实现

目录 一、Makefile 二、processpool.cc 2.1创建通信管道和子进程 2.2控制子进程 2.3回收进程 三、task.hpp 四、完整代码 接下来我们将模拟实现一个进程池&#xff0c;进程池广泛应用与各个领域和方向&#xff0c;比如我们打开电脑后同时打开很多个进程&#xff08;也就是软…

python公务用车医院校园企业车辆管理系统

本 Python版本&#xff1a;python3.7 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask都有,都支持 后端&#xff1a;python 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 公务用车管理智慧云服务监管平台有管理员和用户…

托普利兹矩阵(T矩阵)及其应用(Matlab demo测试)

托普利兹矩阵&#xff08;T矩阵&#xff09;及其应用&#xff08;Matlab demo测试&#xff09; 1. 概念2. Matlab简单测试2.1 生成测试2.2 基本性质及原理2.3 性质验证 3. 其他应用总结3.1 其他性质3.2 文献阅读看到的 参考资料 1. 概念 托普利兹矩阵&#xff0c;简称为T型矩阵…