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中的所有数据…

题解:CF1951E(No Palindromes)

题解&#xff1a;CF1951E&#xff08;No Palindromes&#xff09; 题目翻译&#xff1a;给定一个长度为 n n n 的字符串 s s s&#xff0c;询问是否可以将其分成若干份&#xff0c;使得每一份都不是回文串。若可以&#xff0c;输出 YES 并给出任意一组方案&#xff1b;若不可…

【BASH 常用脚本系列3 -- shell实现查找目录并进入目录】

文章目录 shell实现查找目录并进入目录脚本实现shell实现查找目录并进入目录 在linux中终端下工作,如果要进入一个深度很深的目录的话需要 cd ./xx/xx./.. 执行很多次,用起来很麻烦,有些人就建议使用autojump来实现,但是autojump 的一个缺点是:如果本地有多套代码,只是它…

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

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

【Shell】part1-Shell-基础入门篇

part1-基础入门 HelloWorld 创建,编写,运行 Shell 脚本 vim test.sh#!/bin/bash echo "Hello World !"# 1.作为可执行程序运行 chmod ax ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本# 2.作为解释器参数运行 /bin/sh test.sh /bin/php test.php变量 变…

【Python】 逻辑回归:从训练到预测的完整案例

我把我唱给你听 把你纯真无邪的笑容给我吧 我们应该有快乐的 幸福的晴朗的时光 我把我唱给你听 用我炙热的感情感动你好吗 岁月是值得怀念的留恋的 害羞的红色脸庞 谁能够代替你呀 趁年轻尽情的爱吧 最最亲爱的人啊 路途遥远我们在一起吧 &#x1f3b5; 叶…

如何利用STM32F103实现太阳板的光线追踪

如何利用STM32F103实现太阳板的光线追踪 太阳能发电效率的提升一直是绿色能源领域的研究热点。通过太阳板的光线追踪技术&#xff0c;我们可以确保太阳板始终面向太阳&#xff0c;从而最大化其接收阳光的面积&#xff0c;提高能源转换效率。本文将介绍如何利用STM32F103微控制…

Redis第15讲——RedLock、Zookeeper及数据库实现分布式锁

由于篇幅原因&#xff0c;在上篇文章我们只介绍了redis实现分布式锁的两种方式——setnx和Redission&#xff0c;并对Reidssion加锁和看门狗机制的源码进行了分析&#xff0c;但这两种方案在极端情况下都会出现或多或少的问题。那么针对上述问题&#xff0c;比较主流的解决方案…

Linux服务器基本操作

Linux下服务器基本操作指令 Vim 文件名 进入 i编辑 esc退出编辑 &#xff1a;wq 保存退出 Cp -r文件夹 path 完整或…/ Cp 文件 path pwd 查看当前目录 rm -rf 2005 删除文件夹 Mkdir 创建文件夹 squeue查看提交队列 tail -f rsl.out.0000 在运行当前目录下查看进度 Scancel j…

用Scrapy 从数据挖掘到监控和自动化测试

Scrapy 是一个 BSD 许可的快速高级网络爬虫和网络抓取框架&#xff0c;用于抓取网站并从其页面中提取结构化数据。它可以用于广泛的用途&#xff0c;从数据挖掘到监控和自动化测试。 安装scrapy pip install scrapy 爬虫示例 示例代码写入文件 import scrapyclass QuotesSp…

Kylin Linux V10 SP1 aarch64部署k8s集群严重bug

目录 1.部署方式 2.遇到问题 3.问题解决 1.部署方式 通过sealos方式部署 2.遇到问题 适配Kylin Linux V10 SP1 aarch64部署pod 不少出现CrashLoopBackOff 通过命令: kubectl describe pod xxx -n default 查看,发现报错如下: Error response from daemon: OCI …

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

简约大气的全屏背景壁纸导航网模板 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!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;研究…