矩阵乘法的计算和来源

矩阵乘法的计算

矩阵,是线性代数中的基本概念之一。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。

矩阵乘法是一种高效的算法可以把一些一维递推优化到log(n),还可以求路径方案等,所以更是一种应用性极强的算法。必须注意的是,只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。

一般单说矩阵乘积时,指的便是一般矩阵乘积。若A为m×n矩阵,B为n×p矩阵,则他们的乘积AB(有时记做A·B)会是一个m×p矩阵。其乘积矩阵的元素如下面式子得出:

上面是一个通过代数公式的方式说明这类乘法的抽象性质,有些抽象,下面从一个具体图的角度看看这种乘法:

在上图中,A是个4×2矩阵,B是个2×3矩阵。分别计算AB的(1,2)和(3,3)元素的值,结果可以根据上图中箭头方向两两配对,把每一对中的两个元素相乘,再把这些乘积加起来,最后得到的值即为箭头相交位置的值。

这样在从直观的图中转换为稍微抽象点的公式中,则对应的计算方式为:

                            

不知道CSDN怎么编辑数学公式,就先从百度百科里摘两个例子:

                

矩阵乘法的来源

在矩阵的运算中,矩阵的加法、数与矩阵的积,都与实数或向量的对应运算一致,易于接受掌握。唯独矩阵乘法,与之相差悬殊。初学时感觉莫名其妙,难以接受。扬天哀呼,为啥这么算呢?

来举个简单的例子:

设A1,A2,...,Am是m个工厂,它们都生产着n种产品B1,B2,...,Bm,而Ai厂生产Bj的年产量为aij,i=1,2,…,m;j=1,2,...,n。于是,对照每个工厂各种产品年产量的统计表和产量矩阵就出来了:

                        

如果第二年各厂各种产品的产量都是前一年的λ倍,就是数乘矩阵λA的意义。如果计算各厂各种产品两年的总产量,就用到了矩阵的加法。

接上例,设产品B1,B2,...,Bn皆需p种原料C1,C2,...,Cp,而生存一件Bk所需原料Cj的数量为bkj,于是,统计各种产品每件所需的原料数表和单间原料矩阵为:

                           

现在需要计算各厂每年所需各种原料的总是,设Ai长一年所需原料Cj的总数为cij,则各厂一年所需各种原料总数统计表和原料总数矩阵为:

                             

到这一步,基本上可以想到,cij(i厂需材料j的原料数量)等于i厂各个产品的年产量乘上该产品所需j原料的数量的和,简单点说就是一年所需总料数=年产量×单间所需原料数,用公式表达就是:

从上面的例子可以看出,关于矩阵的乘法,并非空穴来风、无源之水,而是有它必然产生的缘由。充分说明了数学是来源于生活,之所以与生活相差较大,只是因为在语言、符号演化过程中,数学进化的方向是趋向于抽象和一般。

时间: 2024-11-08 17:07:50

矩阵乘法的计算和来源的相关文章

矩阵乘法

矩阵加法就是相同位置的数字加一下,矩阵减法也类似 矩阵乘以一个常数,就是所有位置都乘以这个数 矩阵乘以矩阵 计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3 矩阵的本质就是线性方程式,两者是一一对应关系.如果从线性方程式的角度,理解矩阵乘法就毫无难度.下面是一组线性方程式 矩阵的最初目的,只是为线性方程组提供一个简写形式 下面是严格的证明.有三组未知数 x.y 和 t,

基于OpenMP的矩阵乘法实现及效率提升分析

一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <iostream> #include <omp.h> // OpenMP编程需要包含的头文件 #include <time.h> #include <stdlib.h> using namespace std; #define MatrixOrder 1024 #def

理解矩阵乘法

矩阵加法就是相同位置的数字加一下. 矩阵减法也类似. 矩阵乘以一个常数,就是所有位置都乘以这个数. 但是,等到矩阵乘以矩阵的时候,一切就不一样了. 这个结果是怎么算出来的? 教科书告诉你,计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3. 也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和. 怎么会有这么

Spark中的矩阵乘法分析

前言: 矩阵乘法在数据挖掘/机器学习中是常用的计算步骤,并且在大数据计算中,shuffle过程是不可避免的,矩阵乘法的不同计算方式shuffle的数据量都不相同.通过对矩阵乘法不同计算方式的深入学习,希望能够对大数据算法实现的shuffle过程优化有所启发.网上有很多分布式矩阵乘法相关的文章和论文,但是鲜有对Spark中分布式矩阵乘法的分析.本文针对Spark中分布式矩阵乘法的实现进行必要的说明讨论. 分布式矩阵乘法原理: 矩阵乘法计算可以分为内积法和外积法.根据实现颗粒度的不同,也可以分为普通

C语言实现的矩阵乘法运算器

需求 编写程序模拟矩阵乘法,一个m*n的矩阵,乘以一个 n*m 的矩阵, 并且输出结果. STEP 1  矩阵乘法的计算 一个m行n列的矩阵与一个n行p列的矩阵可以相乘,得到的结果是一个m行p列的矩阵. 其中乘积矩阵的第i行第j列位置上的数,为第一个矩阵第i行上的n个数与第二个矩阵第j列上的n个数对应相乘后所得的n个乘积之和. STEP 2  编程思路 (1)需申请动态二维数组存储两个参与运算的矩阵以及一个结果矩阵: (2)手动输入两个参与运算的矩阵: (3)调用函数实习矩阵乘法的计算 并输出结

矩阵乘法来加速递推式计算

Codevs1281: 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn 计算递推式,运用矩阵来进行计算加速 然后注意用类似快速幂的方法写一个快速加,避免溢出 怎么把式子化成矩阵,日后再补 1 #include<cstdio> 2 long long mod,a,c,x0,n,g; 3 struct Mat 4 { 5 long long m[2][2]; 6 }base,X0; 7 long long quick_add(long lo

简单理解矩阵乘法

作者:知乎用户链接:https://www.zhihu.com/question/21351965/answer/31050145来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 小明今天要做饭,消耗2斤肉,1斤蔬菜.肉每斤20元,蔬菜每斤5元,则一共需多少花费?这个问题的答案很简单:我们用向量相乘的方法写出来:如果小明第二天有另一种做饭的方法,需要消耗1斤肉,4斤蔬菜,那么这两种方法的花费各是多少呢?我们显然需要另算这第二种方法的花费.把这个做饭方式写在第二个矩阵

矩阵乘法的Strassen算法详解

题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p. 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了: 下面咱们来具体解决这个矩阵相乘的问题. 解法一.暴力解法 其实,通过前面的分析

*HDU2254 矩阵乘法

奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2990    Accepted Submission(s): 761 Problem Description 北京迎来了第一个奥运会,我们的欢呼声响彻中国大地,所以今年的奥运金牌 day day up!比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎,被俺们健儿的顽强拼搏的精神深深的