C++ 矩阵

目录

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

矩阵及转置矩阵

矩阵乘法 

矩阵快速幂

相伴矩阵模板

[相伴矩阵,快速矩阵幂]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.mzph.cn/pingmian/5752.shtml

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

相关文章

uniapp 桌面应用插件 Ba-Launcher

简介&#xff08;下载地址&#xff09; Ba-Launcher 可以让你的应用成为简单的桌面应用&#xff0c;如需扩展功能&#xff0c;请联系我。 截图展示 可关注博客&#xff0c;实时更新最新插件&#xff1a; uniapp 常用原生插件大全 使用方法 使用方法也很简单&#xff0c;在插…

PG数据库结构与oracle比较

1.数据库集簇逻辑结构 数据库集簇概念&#xff1a;一个大的数据库是由若干个小的数据库组成&#xff0c;实现数据的隔离存放&#xff0c;在概念上应该是与mysql一样的 在mysql中可以用show database列出数据库 PG中用\l 数据库对象存放在数据库中&#xff1a; PG中的所有数据…

计算机英文论文常见错误写作习惯3

目录 第一部分 Numbers and Equations ‘such as’ and ‘etc.’ 第二部分 第一部分 Numbers and Equations 两个非常常见的错误是关于阿拉伯数字和方程式的表示。中国作家通常写阿拉伯数字&#xff0c;而不是拼出单词。然而&#xff0c;使用阿拉伯数字本身并不是一个错误…

简约大气的全屏背景壁纸导航网源码(免费)

简约大气的全屏背景壁纸导航网模板 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"zh-CN"> <!--版权归孤独 --> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible…

工厂模式和策略模式区别

工厂模式和策略模式都是面向对象设计模式&#xff0c;但它们的目的和应用场景有所不同。 工厂模式是一种创建型设计模式&#xff0c;旨在通过使用一个工厂类来创建对象&#xff0c;而不是直接使用new关键字来创建对象。这样做可以使系统更容易扩展和维护&#xff0c;因为新的对…

图论之最短路算法模板总结

来个大致的分类&#xff1a; 朴素的迪杰斯特拉&#xff1a; 实现&#xff1a; 我们让s表示当前已经确定的最短距离的点&#xff0c;我们找到一个不在s中的距离最近的点t&#xff0c;并用t来更新其他的点。 下面是AC代码&#xff1a; #include<bits/stdc.h> using nam…

C语言-整体内容简单的认识

目录 一、数据类型的介绍二、数据的变量和常量三、变量的作用域和生命周期四、字符串五、转义字符六、操作符六、常见的关键字6.1 关键字static 七、内存分配八、结构体九、指针 一、数据类型的介绍 sizeof是一个操作符&#xff0c;是计算机类型/变量所占内存空间的大小   sc…

中间件之异步通讯组件RabbitMQ入门

一、概述 微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff0c;目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中&#xff0c;调用者发起请求后需要等待服务提供者执行业务返回结果后&#xff0c;才能继续执行后面的业务。也就是说调用者在调用…

Java IO流(二)

1. 缓冲流 1.1 字节缓冲流概述 当对文件或其他数据源进行频繁的读/写操作时&#xff0c;效率比较低&#xff0c;这时如果使用缓存流就能够更高效地读/写信息。 比如&#xff0c;可以使用缓冲输出流来一次性批量写出若干数据减少写出次数来提高写出效率。 如果用生活中的例子做…

使用qemu调试NVME driver

参考nvme驱动相关的博客&#xff0c;可以使用qemu buildroot进行nvme驱动的流程debug。 一、QEMU编译 首先需要编译qemu&#xff0c;可以参考QEMU编译。wget下载最新版本的QEMU&#xff0c;编译之前&#xff0c;最好检查下依赖包是否安装&#xff0c;避免安装过程出现各种错…

Qwen-Audio:推动通用音频理解的统一大规模音频-语言模型(开源)

随着人工智能技术的不断进步&#xff0c;音频语言模型&#xff08;Audio-Language Models&#xff09;在人机交互领域变得越来越重要。然而&#xff0c;由于缺乏能够处理多样化音频类型和任务的预训练模型&#xff0c;该领域的进展受到了限制。为了克服这一挑战&#xff0c;研究…

【WebGL】修改阴影体形状,实现相交分析

阴影体&#xff08;Shadow Volume&#xff09;技术是计算机图形学中实现阴影的重要方式&#xff0c;除了用于可视化阴影效果外&#xff0c;阴影体还能实现线、面等要素的贴地、贴对象显示。在用阴影体贴地、贴对象时&#xff0c;大多数情况下我们都会认为阴影体是一个带有高度的…

OpenCV的图像矩(64)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何为等值线创建边界旋转框和椭圆(63) 下一篇 &#xff1a;OpenCV4.9的点多边形测试(65) Image Moments&#xff08;图像矩&#xff09;是 OpenCV 库中的一个功能&#xff0c;它可…

神经网络中常见的激活函数:理解与实践

神经网络中常见的激活函数&#xff1a;理解与实践 在神经网络中&#xff0c;激活函数是一个非常重要的组成部分&#xff0c;它为神经元引入了非线性特性&#xff0c;使得神经网络可以拟合各种复杂的函数关系。本文将介绍9种常见的激活函数&#xff0c;包括它们的概述、公式以及…

MATLAB 数据导入

MATLAB 数据导入&#xff08;ImportData&#xff09; 在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式 序号 功能说明 1 A importdata(filename) 从filename表示的文件中将数据加载到数组A中。 2 A i…

附录3-小程序常用事件

目录 1 点击事件 tap 2 文本框输入事件 input 3 状态改变事件 change 4 下拉刷新事件 onPullDownRefresh() 5 上拉触底事件 onReachBottom() 1 点击事件 tap 2 文本框输入事件 input 可以使用 e.detail.value 打印出当前文本框的值 我现在在文本框中依次输入12345&…

区块链 | IPFS 工作原理入门

&#x1f98a;原文&#xff1a;What is the InterPlanetary File System (IPFS), and how does it work? &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。 1 去中心化互联网 尽管万维网是一个全球性的网络&#xff0c;但在数据存储方面&#…

帕金森患者应该怎么注意生活方式?

在面对帕金森病的挑战时&#xff0c;科学合理地改善日常生活方式&#xff0c;不仅能帮助患者更好地管理病情&#xff0c;还能提升生活质量。今天&#xff0c;让我们一起探索如何通过简单的日常调整&#xff0c;为患有帕金森病的朋友们带来积极的变化。 饮食调整&#xff1a;营养…

【Mac】Photoshop 2024 for mac最新安装教程

软件介绍 Photoshop 2024是Adobe公司推出的一款图像处理软件&#xff0c;它支持Windows和Mac OS系统。Adobe Photoshop是业界领先的图像编辑和处理软件之一&#xff0c;广泛用于设计、摄影、数字绘画等领域。 Photoshop 2024的功能包括&#xff1a; 1.图像编辑&#xff1a;提…

MinIO学习(1) - 概览,安装

简介 MinIO 是一个高性能的分布式对象存储系统。 它是软件定义的&#xff0c;在行业标准硬件上运行&#xff0c;并且 100% 开源&#xff0c;主要许可证是 GNU AGPL v3。 MinIO 的不同之处在于它从一开始就被设计为私有/混合云对象存储的标准。 因为 MinIO 是专门为对象而构建…