矩阵乘法

【线性代数的本质】矩阵、线性变换、矩阵乘法与线性变换复合

微笑、不失礼 提交于 2020-04-08 11:49:49
线性代数的本质,源视频 https://www.bilibili.com/video/BV1ys411472E @ 目录 矩阵和线性变换 矩阵乘法与复合变换 Unfortunately, no one can be told what the Matrix is. You have to see it for your self. ------ Morpheus 矩阵是什么? 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。 在线性代数中,最容易被忽略但是非常重要的一点就是线性变换的概念以及它和矩阵的关系。 矩阵和线性变换 对于变换,变换其实就是函数的另外一种说法,它接受一个输入,然后输出对应的结果。 特别的,在线性代数下,我们考虑的是接受一个向量并且输出一个向量的变换。 为什么要用变换呢? 因为 变换 是在暗示以特定的方式来可视化这 输入-输出 关系,一种理解向量的函数的方式是使用运动。 例如在二维空间中,我们将一个输入向量移动到输出向量的位置,要理解整个变换,我们可以想象每一个输入向量输出到对应输出向量的位置。 二维空间在这种变化时候,我们可以对无限网格上的所有点同时做变换,还可以保留原来坐标的网格,以便追踪起点和终点的位置。 那么什么是线性变换呢

矩阵十题(1)

喜你入骨 提交于 2020-04-07 19:45:03
Matrix67大牛关于矩阵经典题目的链接: http://www.matrix67.com/blog/archives/276/ nyoj 298 点的变换 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=298 经典题目1    给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置。操作有平移、缩放、翻转和旋转 这里的操作是对所有点同时进行的。其中翻转是以坐标轴为对称轴进行翻转(两种情况),旋转则以原点为中心。如果对每个点分别进行模拟,那么m个操作总共耗 时O(mn)。利用矩阵乘法可以在O(m)的时间里把所有操作合并为一个矩阵,然后每个点与该矩阵相乘即可直接得出最终该点的位置,总共耗时 O(m+n)。假设初始时某个点的坐标为x和y,下面5个矩阵可以分别对其进行平移、旋转、翻转和旋转操作。预先把所有m个操作所对应的矩阵全部乘起来, 再乘以(x,y,1),即可一步得出最终点的位置。 注意:m个操作的矩阵连乘时必须左乘 代码如下: 1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 #define N 5 5 struct Matrix 6 { 7 double a[N][N]; 8 }res,tmp,origin,ans,point

矩阵乘法递归求解

两盒软妹~` 提交于 2020-04-07 09:01:31
给定两个N×N的矩阵,求乘积 如下图所示,乘法执行过程如下: 1.矩阵1先拿出一行,矩阵2先拿出一列 2.行与列相乘得到value1 3.行与剩下矩阵2相乘得到value2(递归过程) 4.剩下矩阵1与列相乘得到value3(递归过程) 5.剩下矩阵1与剩下矩阵2相乘得到value4(递归过程) 6.将value1~value4合并成结果数组 写代码时注意约定,value1一定是数值,value2、value3、value4是数值、空数组或者非空的二维数组 由php实现,大体思路不难,但是要非常注意合并结果的细节: 1 <?php 2 3 class MatrixProduct 4 { 5 protected $matrix1, $matrix2; 6 protected $result; 7 8 public function __construct($matrix1, $matrix2) 9 { 10 $this->matrix1 = $matrix1; 11 $this->matrix2 = $matrix2; 12 $this->result = $this->matrixProduction($this->matrix1, $this->matrix2); 13 } 14 15 public function show() 16 { 17 foreach ($this-

矩阵快速幂模板

血红的双手。 提交于 2020-04-07 08:33:16
第一部分:矩阵的基础知识 1.结合性 (AB)C=A(BC). 2.对加法的分配性 (A+B)C=AC+BC,C(A+B)=CA+CB . 3.对数乘的结合性 k(AB)=(kA)B =A(kB). 4.关于转置 (AB)'=B'A'. 一个矩阵就是一个二维数组,为了方便声明多个矩阵,我们一般会将矩阵封装一个类或定义一个矩阵的结构体,我采用的是后者。(弱鸡的我也直只会用结构体实现) 第二部分:矩阵相乘 若A为n×k矩阵,B为k×m矩阵,则它们的乘积AB(有时记做A·B)将是一个n×m矩阵。前一个矩阵的列数应该等于后一个矩阵的行数,得出的矩阵行数等于前一个矩阵的行数,列数等于后一个矩阵的行数。 其乘积矩阵AB的第i行第j列的元素为: 举例:A、B均为3*3的矩阵:C=A*B,下面的代码会涉及到两种运算顺序,第一种就是直接一步到位求,第二种就是每次求一列,比如第一次,C00+=a00*b00,C01+=a00*b01……第二次C00+=a00*b10,C01+=a01*b11……以此类推。。。 C00 = a00*b00 + a01*b10 + a02*b20 C01 = a00*b01 + a01*b11 + a02*b21 C02 = a00*b02 + a01*b12 + a02*b22 C10 = a10*b00 + a11*b10 + a12*b20 C11 = a10

矩阵快速幂&T1

落爺英雄遲暮 提交于 2020-04-07 08:19:00
T1 知识储备 在写这一题之前,我们首先要了解矩阵乘法(我就是因为不懂弄了好久...) 矩阵的运算()-----(信息学奥赛一本通之提高篇) 矩阵的加法减法是十分简单的,就是把2个矩阵上对应的位置相加减 矩阵乘法 1.我们要满足A矩阵的列数和B矩阵的行数相等 2.如果A是一个n*r的矩阵,B是一个r*m的矩阵,那么A和B的乘积C是一个n*m的矩阵 3.C i,j= a i,1 *b 1,j +a i,2 *b 2,j +a i,3 *b 3,j +...+a i,r *b r,j ; 由以上我们要得出一个重要的结论,就是:矩阵乘法满足结合律即A*B+A*C=A*(B+C) 方阵乘幂 A是一个方阵,将A连成n次,即:C=A n 如果不是方阵就不能进行乘幂运算,然后由我们上面得出来的矩阵乘法满足结合律,因此我们可以用快速幂的方法求解解 矩阵乘法的应用 1.通过状态矩阵和状态转移矩阵相乘可以快速得到一次DP的值 2.求矩阵相乘的结果是要做很多次乘法,这样的效率非常慢甚至不如原来的DP转移.所以我们可以先算后面的转移矩阵,并将其与初始矩阵相乘得到结果,算法的时间复杂度为log(n)级别 矩阵快速幂 恩恩,直接上代码 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define FOR(i,a,b) for(register ll i

矩阵快速幂

核能气质少年 提交于 2020-04-06 19:30:42
矩阵快速幂 \(emmm\) ,考试上面见到的,以前听颜神讲过一遍但是没有听懂,现在看一下还是比较妙妙的 矩阵乘法 矩阵乘法是什么? 简而言之就是 \[c_{ij} = \quad\sum_{k=1}^na_{ik} *b_{kj} \] 举个简单的例子 \[\left\{ \begin{matrix} 14 \\ 32 \\ 50 \end{matrix} \right\} = \left\{ \begin{matrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{matrix} \right\} * \left\{ \begin{matrix} 1\\ 2 \\ 3 \end{matrix} \right\} \] 真简单哇!(光速溜 \(emmm\) ,这就是矩阵乘法的定义 下面给出详细代码 int n;//矩阵大小 void Up(int &x, int y) { x = (x + y) % mod; }//简单定义 += struct Matrix { int a[n][n];//矩阵 friend Matrix operator *(const Matrix x, const Matrix y)//定义矩阵类型的乘法 { Matrix c;//定义新的矩阵用来存储结果 memset(c.a, 0, sizeof(c.a));//初始化

蓝桥杯 矩阵乘法 模拟

吃可爱长大的小学妹 提交于 2020-04-05 18:01:11
问题描述   输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。 输入格式   第一行,空格隔开的三个正整数m,s,n(均不超过200)。   接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。   接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。 输出格式   m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。 样例输入 2 3 2 1 0 -1 1 1 -3 0 3 1 2 3 1 样例输出 -3 2 -8 2 提示 矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。 例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3 解题思路:三层for循环注意嵌套顺序 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 210; 4 int a[N][N], b[N][N], c[N][N]; 5 int main() { 6 int m, s, n; 7 cin >> m >> s >> n; 8 for (int i = 0; i < m; i++) { 9 for (int j = 0; j < s; j++) { 10 cin >> a[i][j]; 11 } 12 }

matlab基础知识

穿精又带淫゛_ 提交于 2020-04-02 20:55:52
MATLAB 数值数据类型 整型 无符8位整型 0~255 函数uint8(data) 将data转无符整型 data超出范围则为127 有符8位整型 -128~127 函数int8 将数值数据转带符号8位整型 浮点型 单精度 4字节 函数single() 将数值数据转单精度 双精度 8字节 默认双精度 函数class()将数值数据转双精度 复数型 实部与虚部默认双精度 虚数单位用i或j表示 函数real() 求实部 函数imag() 求虚部 f ormat 命令: 数据的输出格式 ;只影响数据输出格式,不影响存储与计算 语法 format 格式符 例如format long/short 常用数学函数 函数调用格式:函数名(函数自变量的值) 函数自变量的值为矩阵变量 1、三角函数 例如:sin(x):x以弧度为单位 ; sind(x):x以角度为单位 2、abs函数 求实数的绝对值、复数的mo、字符串的ASCII值 3、取整函数 fix(取小数的整数部分), floor(向下取整), ceil(向上取整), round(四舍五入) 4、函数rem(m,n) m/n的余数 5、y=isprime(x) x矩阵中元素是素数的对应矩阵y元素相应值为1,否则为0 6、sqrt(x) 求x的平方;exp(x) 求e的x次方 变量 1、预定义变量 使用时要避免对其重新赋值 ans默认复制变量

Matlab - 基础知识

烂漫一生 提交于 2020-03-30 02:11:55
Matlab R2016a完全自学一本通 记在前面: (1)函数中:dim=1 按列;dim=2 按行 (2)这本书很垃圾,不建议买。 (3)在数据库连接中,用两个单引号表示字符串,千万不能用双引号 第2章 Matlab基础知识 2.1 数据类型 数值,逻辑,字符串,函数句柄,结构体,单元数组 2.1.1 数值类型 int8,uint8;int16,uint16;int32,uint32;int64,uint64  整数型 single 单精度 double 双精度 (默认) 示例:int32(820) 查看数值类型 class() 函数 向下取整 floor(x) 向上取整 ceil(x) 四舍五入 round(x) 向0取整 fix(x) 以数轴的思想去思考。正整数时同floor 负整数时同ceil whos列出当前spacework的所有变量 eps函数 默认是1 eps(1)表示离1最近的浮点数值;因为精度只有这么多,算出的结果会去匹配到系统的精度。一般不影响计算结果,除非对数值有非常苛刻的要求。 复数部分: complex(a,b) : 构建复数 a+bi real(z) z的实部;image(z) z的虚部;abs(z) 复数z的模;angle(z) 复数的辐角;conj(z) 复数的共轭复数 无穷量(Inf) 和 非数值量(NaN) Inf -Inf NaN 2.1

Matlab笔记--->常用命令及操作

不羁岁月 提交于 2020-03-28 19:00:04
matlab全称为矩阵实验室,matrix&laboratory两个词的组合。 一、matlab定义和初始化变量:一般形式: 变量 = 表达式(数) 直接输入,类似: x=2 x=[1,2,3] %或者 x=[1 2 3] y=[1 2 3;4 5 6] A=[1 2;3 4] B=[3 4;5 6] a = [1 2 3 ; 4 5 6 ; 7 8 9 ] %矩阵形式赋值. a = 1:2:10 %固定步长的矩阵. zeros(3,2) %三行两列的全零矩阵. who % 检查工作空间的变量 whos % 检查存于工作空间变量的详细资料 a = 1 2 3 4 5 6 7 8 9 a = 1 3 5 7 9 ans = 0 0 0 0 0 0 Your variables are: A B C X Y Z a ans b f1 f2 fs i num t x y y1 y2 yy Name Size Bytes Class Attributes A 3x3 72 double B 3x3 72 double C 3x3 72 double X 21x21 3528 double Y 21x21 3528 double Z 21x21 3528 double a 1x5 40 double ans 3x2 48 double b 1x32 256 double f1 1x1 8