【数学】矩阵、向量(内含矩阵乘法C++)

目录

  • 一、前置知识:向量(一列或一行的矩阵)、矩阵
    • 1. 行向量
    • 2. 列向量
    • 3. 向量其余基本概念
    • 4. 矩阵基本概念
    • 5. 关于它们的细节
  • 二、运算
    • 1. 转置
      • (1)定义
      • (2)性质
    • 2. 矩阵(向量)与矩阵(向量)的加减法
    • 3. 点乘与乘法
      • (1)定义:矩阵点乘
      • (2)定义:向量点乘
      • (3)定义:矩阵(向量)与标量的乘法
      • (4)定义:矩阵(向量)与矩阵(向量)的乘法
      • (5)性质:矩阵(向量)与矩阵(向量)的乘法
      • (6)应用:矩阵快速幂,进行加速
  • 三、拓展
    • 1. 向量表示里的几何意义
    • 2. 向量加法里的几何意义
    • 3. 向量求反里的几何意义
  • 四、结尾


一、前置知识:向量(一列或一行的矩阵)、矩阵

1. 行向量

例如 [ 1 1 4 ] \begin{bmatrix}1&1&4\end{bmatrix} [114],这就是一个行向量 [ 1 1 4 ] \begin{bmatrix}1&1&4\end{bmatrix} [114]可以理解为一个 1 1 1 3 3 3列矩阵。

行向量: [ a 1 … a n ] \begin{bmatrix}a_1&\dots&a_n\end{bmatrix} [a1an] n n n为任意取值。

2. 列向量

例如 [ 5 1 4 ] \begin{bmatrix}5\\1\\4\end{bmatrix} 514 ,这就是一个列向量 [ 5 1 4 ] \begin{bmatrix}5\\1\\4\end{bmatrix} 514 可以理解为一个 3 3 3 1 1 1列的矩阵。

列向量: [ a 1 ⋮ a n ] \begin{bmatrix}a_1\\\vdots\\a_n\end{bmatrix} a1an n n n为任意取值。

3. 向量其余基本概念

向量是一个有方向与大小的量,它的起点可以是任意位置

维度:
[ a 1 ] \begin{bmatrix}a_1\end{bmatrix} [a1],这是一个一维向量,它仅有一个数字。而 [ a 1 ⋮ a n ] \begin{bmatrix}a_1\\\vdots\\a_n\end{bmatrix} a1an [ a 1 … a n ] \begin{bmatrix}a_1&\dots&a_n\end{bmatrix} [a1an],它们都是 n n n维的。

长度:
向量的长度也就是它的大小,我们称它为。而模则为向量起点与终点之间的距离

4. 矩阵基本概念

[ 1 1 4 1 6 1 4 1 5 ] \begin{bmatrix}1&1&4\\1&6&1\\4&1&5\end{bmatrix} 114161415 注: 这是一个维度为 3 × 3 3\times3 3×3的矩阵。

一个矩阵的维度表示为 m × n m\times n m×n,即 m m m n n n列的矩阵。

5. 关于它们的细节

向量可以视为一种特殊的矩阵,我们通常用大写字母表示矩阵;小写字母表示向量,带一个小箭头,例如 v ⃗ \vec{v} v 。例如 v i v_i vi表示向量 v v v的第 i i i项(即第 i i i个元素,行向量从左往右数,列向量从上往下), a i , j a_{i,j} ai,j A i , j A_{i,j} Ai,j表示矩阵 A A A的第 i i i行第 j j j列的元素。

二、运算

下文由于向量可以视为一种特殊的矩阵,且为了方便所以均用大写字母表示向量或矩阵。

1. 转置

(1)定义

A T A^T AT表示对 A A A进行转置,即 A A A的第 i i i行将变成
A T A^T AT的第 i i i列。若 A = [ 1 1 4 5 1 4 ] A=\begin{bmatrix}1&1&4\\5&1&4\end{bmatrix} A=[151144],则 A T = [ 1 5 1 1 4 4 ] A^T=\begin{bmatrix}1&5\\1&1\\4&4\end{bmatrix} AT= 114514

(2)性质

  • ( A T ) T = A (A^T)^T=A (AT)T=A
  • ( A + B ) T = A T + B T (A+B)^T=A^T+B^T (A+B)T=AT+BT

2. 矩阵(向量)与矩阵(向量)的加减法

我们设 A ± B = C A\pm B=C A±B=C

A ± B A\pm B A±B不是随便的, A A A B B B要求维度相同。且 C C C维度仍与 A A A B B B相同。
运算方式, C i , j = A i , j ± B i , j C_{i,j}=A_{i,j}\pm B_{i,j} Ci,j=Ai,j±Bi,j

3. 点乘与乘法

(1)定义:矩阵点乘

我们设 A ∘ B = C A\circ B=C AB=C

矩阵点乘的符号为“ ∘ \circ ”,其中 A A A B B B C C C均为矩阵,且维度相同。运算方法也很简单, C i , j = A i , j × B i , j C_{i,j}=A_{i,j}\times B_{i,j} Ci,j=Ai,j×Bi,j

(2)定义:向量点乘

我们再设 A ⋅ B = n A\cdot B=n AB=n

显然 A A A B B B均为向量,且维度相同,而 n n n又是一个标量。那 n n n为多少? n = ∑ i = 1 m A i , j B i , j n=\sum_{i=1}^mA_{i,j}B_{i,j} n=i=1mAi,jBi,j m m m A A A B B B的维度)。

(3)定义:矩阵(向量)与标量的乘法

我们再设 n A = B nA=B nA=B

A A A B B B矩阵(向量) n n n标量,显而易见 B i , j = n A i , j B_{i,j}=nA_{i,j} Bi,j=nAi,j

(4)定义:矩阵(向量)与矩阵(向量)的乘法

我们再再设 A B = C AB=C AB=C,设 A A A维度为 m × n m\times n m×n,而 B B B维度为 n × p n\times p n×p,则 C C C维度为 m × p m\times p m×p

运算方式大概如此(复杂): C i , j = A i 行 ⋅ B j 列 C_{i,j}=A_{i行}\cdot B_{j列} Ci,j=AiBj,即 C i , j = ∑ i = 1 n A i , k B k , j C_{i,j}=\sum_{i=1}^nA_{i,k}B_{k,j} Ci,j=i=1nAi,kBk,j

(5)性质:矩阵(向量)与矩阵(向量)的乘法

  • 没有交换律。
  • 结合律和分配率。

(6)应用:矩阵快速幂,进行加速

现在目光转置P1962,要运用矩阵乘法来解决求斐波那契数列第 n n n项(对 1 0 9 + 7 10^9+7 109+7取模)。

我们构造一个矩阵 A A A与矩阵 B B B A = [ x y ] A=\begin{bmatrix}x&y\end{bmatrix} A=[xy] B = [ 1 1 1 0 ] B=\begin{bmatrix}1&1\\1&0\end{bmatrix} B=[1110],而 A B = [ x + y x ] AB=\begin{bmatrix}x+y&x\end{bmatrix} AB=[x+yx]。现在设 x x x是斐波那契数列的第 ( i + 1 ) (i+1) (i+1)项(简记 F i + 1 F_{i+1} Fi+1), y y y则为第 i i i项(简记 F i F_i Fi)。再把目光转回矩阵, A = [ F i + 1 F i ] A=\begin{bmatrix}F_{i+1}&F_i\end{bmatrix} A=[Fi+1Fi]
A B = [ F i + 1 + F n F i + 1 ] AB=\begin{bmatrix}F_{i+1}+F_n&F_{i+1}\end{bmatrix} AB=[Fi+1+FnFi+1],根据斐波那契数列的规律, F i + 1 + F i = F i + 2 F_{i+1}+F_i=F_{i+2} Fi+1+Fi=Fi+2,so A B = [ F i + 2 F i + 1 ] AB=\begin{bmatrix}F_{i+2}&F_{i+1}\end{bmatrix} AB=[Fi+2Fi+1],很容易发现 A B AB AB A A A中每项都进了一位,也就是说只要一直乘 B B B直至结果矩阵为 [ F n F n − 1 ] \begin{bmatrix}F_n&F_{n-1}\end{bmatrix} [FnFn1],第一项就是P1962的答案。

但是直接递推到 F n F_n Fn O ( n ) O(n) O(n)的,乘到 F n F_n Fn也是 O ( n ) O(n) O(n)的。但是多个相同数相乘是数的幂,多个相同矩阵相乘是矩阵的幂,同样也可以使用快速幂,现在复杂度大约为 O ( k l o g 2 n ) O(klog_2n) O(klog2n)(有些小细节没有提及), k k k为矩阵乘法运算时耗掉的。这时当 n n n的值到达一个程度,时间就会大幅减少。

代码如下。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll p=1e9+7;
struct mat{ll nr,nc;ll m[15][15];mat(ll NR=0,ll NC=0){nr=NR,nc=NC;memset(m,0,sizeof(m));}mat operator=(mat b){nr=b.nr;nc=b.nc;for(int i=1;i<=nr;i++)for(int j=1;j<=nc;j++)m[i][j]=b.m[i][j];}
};
mat operator*(mat a,mat b){mat c(a.nr,b.nc);for(int i=1;i<=a.nr;i++){for(int j=1;j<=b.nc;j++){for(int k=1;k<=a.nc;k++){c.m[i][j]=(a.m[i][k]*b.m[k][j]%p+c.m[i][j])%p;}}}return c;
}
mat fastpow(mat a,ll b){if(b==1)return a;if(b%2==0)return fastpow(a*a,b/2);else return fastpow(a*a,b/2)*a;
}
int main(){ll n;cin>>n;if(n<=2){cout<<1;return 0;}mat fib(1,2),tmp(2,2),tmp2;fib.m[1][1]=1,fib.m[1][2]=1;tmp.m[1][1]=1,tmp.m[1][2]=1;tmp.m[2][1]=1;tmp2=fib*fastpow(tmp,n-2);cout<<tmp2.m[1][1];
}

三、拓展

1. 向量表示里的几何意义

例如有一个二维向量, v ⃗ = [ x y ] \vec{v}=\begin{bmatrix}x\\y\end{bmatrix} v =[xy],它将原点 ( 0 , 0 ) (0,0) (0,0)作为起点时,它的终点就是 ( x , y ) (x,y) (x,y)

2. 向量加法里的几何意义

如图,向量 a a a与向量 b b b头尾相接最终与向量 c c c到达同一目的地,而恰好 a ⃗ + b ⃗ = c ⃗ \vec{a}+\vec{b}=\vec{c} a +b =c

3. 向量求反里的几何意义

a ⃗ \vec{a} a − a ⃗ -\vec{a} a 的区别在于将 a ⃗ \vec{a} a 旋转 180 ° 180\degree 180°就可以得 − a ⃗ -\vec{a} a ,即方向相反。

四、结尾

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

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

相关文章

TCP/IP 邮件

TCP/IP 邮件 引言 在互联网技术飞速发展的今天,电子邮件(Email)已成为人们日常工作和生活中不可或缺的通信工具。TCP/IP协议作为互联网通信的基础,为电子邮件的传输提供了强大的技术支持。本文将详细介绍TCP/IP在电子邮件传输过程中的作用,以及相关的协议和实现方式。 …

离线安装Appium Server

1、问题概述? 安装Appium通常有两种方式: 第一种:下载exe安装包,这种是Appium Server GUI安装方式,缺点是通过命令启动不方便。 第二种:通过cmd安装appium server,可以通过命令方式启动,比较方便。 问题:在没有外网的情况下,无法通过命令在cmd中安装appium server…

设计模式六大原则和单例模式

设计模式 目的 实现可重用解决方案&#xff0c;构筑易维护、可扩展的软件系统。 六大原则 单一职责&#xff1a; 类的职责单一&#xff0c;一个方法做一件事。 开闭原则&#xff1a; 拓展开放&#xff0c;修改关闭。 里氏替换&#xff1a; 父类能出现的地方&#xff0c;子…

浅尝yolo11全程记录1-准备环境+官网模型推理(个人备份)

准备工作&#xff08;虚拟环境、导入项目&#xff09; 安装Anaconda 主要是为了创建和管理虚拟环境&#xff0c;在pycharm里按照项目里的requirments.txt安装依赖的时候&#xff0c;使用虚拟环境会好很多&#xff08;我记得不用Anaconda也可以直接在pycharm的terminal里头创建…

5.攻防世界 fileinclude

进入题目页面如下 提示flag在flag.php ctrlu&#xff0c;查看源码 给出了一段PHP代码&#xff0c;进行代码审计 <?php // 检查是否开启了错误显示功能 if( !ini_get(display_errors) ) {// 如果没有开启&#xff0c;则将错误显示功能设置为开启状态ini_set(display_error…

深入浅出 NRM:加速你的 npm 包管理之旅

文章目录 前言一、NRM 是什么&#xff1f;二、为什么需要 NRM&#xff1f;三、NRM 的优势四、NRM 的安装与使用4.1 安装 NRM4.2 查看可用的 npm 源4.3 切换 npm 源4.4 测试 npm 源速度4.5 添加自定义 npm 源4.6 删除 npm 源 五、NRM 的进阶使用六、总结 前言 作为一名 JavaScr…

《C#之集训1-20121019c#基础》

&#xfeff;&#xfeff; C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。它是微软公司研究员Anders Hejlsberg的最新成果。 C#曾经的它在我眼中是很高大上的&#xff0c;一直没有目睹其风采&#xff0c;现在终于揭开了它神秘的面纱&#xf…

红包雨项目前端部分

创建项目 pnpm i -g vue/cli vue create red_pakage pnpm i sass sass-locader -D pnpm i --save normalize.css pnpm i --save-dev postcss-px-to-viewportpnpm i vantlatest-v2 -S pnpm i babel-plugin-import -Dhttps://vant.pro/vant/v2/#/zh-CN/<van-button click&…

蓝桥杯嵌入式备赛(三)—— LED +按键 + LCD

目录 一、LED1、原理图介绍2、程序代码 二、按键1、原理图介绍2、程序代码 三、LCD1、原理图介绍2、程序代码 一、LED 1、原理图介绍 如果所示&#xff0c;STM32G431RBT6中有八个LED&#xff0c;由八个GPIO控制&#xff0c;分别为PC8-15&#xff0c;当输出为低电平时点亮。其中…

深入剖析 HTML5 新特性:语义化标签和表单控件完全指南

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…

[Java基础]函数式编程

Lambda函数 JDK8新增的语法形式, 使用Lambda函数替代某些匿名内部类对象&#xff0c;从而让程序代码更简洁&#xff0c;可读性更好。 基本使用 lambda表达式只能简化函数式接口的匿名内部类写法 // 1.定义抽象类 abstract class Animal {public abstract void crt(); }publi…

Vue通过触发与监听事件进行数据传递: 子组件调用 $emit 方法来将数据传递给父组件。

文章目录 引言I 组件事件事件参数defineEmits 宏声明需要抛出的事件事件校验例子:子组件告诉父组件放大所有博客文章的文字II 【详细说明】 子组件通过触发一个事件,将数据传递给父组件调用内建的 `$emit `方法传入事件名称来触发一个事件子组件通过`this.$emit`来触发一个事…

Vim 多窗口编辑及文件对比

水平分割 :split 默认使用水平分割的方式。 :split :sp 垂直分割 :vsplit :vs 带文件的分割 :split 文件名 :sp 文件名 在光标所在的窗口&#xff0c;输入分割窗口命令就会对那个窗口进行分割。 切换窗口 Ctrlw 切换正在编辑的窗口 快速分割窗口 Ctrlwn 快速分割当前…

“卫星-无人机-地面”遥感数据快速使用及地物含量计算的实现方法

在与上千学员交流过程中&#xff0c;发现科研、生产和应用多源遥感数据时&#xff0c;能快速上手&#xff0c;发挥数据的时效性&#xff0c;尽快出创新性成果&#xff0c;是目前的学员最迫切的需求。特别是按照“遥感数据获取-处理-分析-计算-制图”全流程的答疑解惑&#xff0…

二级C语言题解:十进制转其他进制、非素数求和、重复数统计

目录 一、程序填空&#x1f4dd; --- 十进制转其他进制 题目&#x1f4c3; 分析&#x1f9d0; 二、程序修改&#x1f6e0;️ --- 非素数求和 题目&#x1f4c3; 分析&#x1f9d0; 三、程序设计&#x1f4bb; --- 重复数统计 题目&#x1f4c3; 分析&#x1f9d0; 前言…

使用服务器部署DeepSeek-R1模型【详细版】

文章目录 引言deepseek-r1IDE或者终端工具算力平台体验deepseek-r1模型总结 引言 在现代的机器学习和深度学习应用中&#xff0c;模型部署和服务化是每个开发者面临的重要任务。无论是用于智能推荐、自然语言处理还是图像识别&#xff0c;如何高效、稳定地将深度学习模型部署到…

让相机自己决定拍哪儿!——NeRF 三维重建的主动探索之路

我在 NeRF 中折腾自动探索式三维重建的心得 写在前面&#xff1a; 最近我在研究三维重建方向&#xff0c;深切感受到 NeRF (Neural Radiance Fields) 在学术界和工业界都备受瞩目。以往三维重建通常要依赖繁琐的多视图几何管线&#xff08;比如特征匹配、深度估计、网格融合等&…

央行发布《贸易金融分布式账本技术要求》,参考架构包括5部分

《银行科技研究社》(作者 木子剑):2024年12月11日,中国人民银行发布金融行业标准《贸易金融分布式账本技术要求》(JR/T 0308-2024)(以下简称“《要求》”),当日实施。据悉,该文件的起草单位包括6大行和多家股份制银行等。 《要求》规定了分布式账本技术在贸易金融领域…

管理etcd的存储空间配额

如何管理etcd的存储空间配额 - 防止集群存储耗尽指南 本文基于etcd v3.4官方文档编写 为什么需要空间配额&#xff1f; 在分布式系统中&#xff0c;etcd作为可靠的键值存储&#xff0c;很容易成为系统瓶颈。当遇到以下情况时&#xff1a; 应用程序频繁写入大量数据未及时清理…

调用腾讯云批量文本翻译API翻译srt字幕

上一篇文章介绍了调用百度翻译API翻译日文srt字幕的方法。百度翻译API是get方式调用&#xff0c;参数都放在ur中&#xff0c;每次调用翻译文本长度除了接口限制外&#xff0c;还有url长度限制&#xff0c;而日文字符通过ur转码后会占9个字符长度&#xff0c;其实从这个角度来讲…