线性代数:矩阵基本运算 矩阵怎么进行加减

本文将介绍矩阵的大部分基本运算 , 分别是矩阵的加法和减法、矩阵的标量乘法、矩阵与矩阵的乘法、求转置矩阵、深入理解矩阵的行列式运算 。逆矩阵和矩阵秩的概念本文不涉及 , 以后再讨论 。
矩阵的加法和减法矩阵的
加法和减法运算会吸收两个矩阵作为输入 , 输出一个新的矩阵 。矩阵的加和减是在组件级执行的 , 因此要加和减的矩阵必须具有相同的维数 。为了避免反复写加减法的代码 , 我们先创建一个可以吸收运算函数的 。此 将分离两个矩阵的分量以执行传入操作 。然后在加法、减法或者其他运算中直接调用:
classMatrix{//...componentWiseOperation(func,{rows}){constnewRows=rows.map((row,i)=>红豆博客row.map((element,j)=>func(this.rows[i][j],element)))returnnewMatrix(...newRows)}add(other){returnthis.componentWiseOperation((a,b)=>a+b,other)}subtract(other){returnthis.componentWiseOperation((a,b)=>a-b,other)}}constone=newMatrix([1,2],[3,4])constother=newMatrix([5,6],[7,8])console.log(one.add(other))//Matrix{rows:[[6,8],[10,12]]}console.log(other.sub红豆博客tract(one))//Matrix{rows:[[4,4],[4,4]]}复制代码矩阵的标量乘法矩阵的标量乘法类似于向量的缩放 , 即矩阵中的每个元素都乘以一个标量:
classMatrix{//...scaleBy(number){constnewRows=this.rows.map(row=>row.map(element=>element*number))returnnewMatrix(...newRows)}}constmatrix=newMatrix([2,3],[4,5])console.log(matrix.scaleBy(2))//Matrix{rows:[[4,6],[8,10]]}复制代码矩阵乘法当
A , B的维数与相容时 , 两个矩阵可以矩阵相乘 。维度兼容性是指[div]A的列数与B的行数相同 。矩阵AB的乘积是通过计算A的每一行与矩阵B 的每一列的点积得到的:

class[div]Matrix{//...multiply(other){if(this.rows[0].length!==other.rows.length){thrownewError('Thenumberofcolumnsofthismatrixisnotequaltothenumberofrowsofthegivenmatrix.')}constcolumns=other.columns()constnewRows=this.rows.map(row=>columns.map(column=>sum(row.map((element,i)=>element*column[i]))))returnnewMatrix(...newRows)}}constone=newMatrix(红豆博客[3,-4],[0,-3],[6,-2],[-1,1])constother=newMatrix([3,2,-4],[4,-3,5])console.log(one.multiply(other))//Matrix{//rows://[[-7,18,-32],//[-12,9,-15],//[10,18,-34],//[1,-5,9]]}复制代码我们可以把矩阵乘法
AB看成是连续使用两个线性变换矩阵A和B 。为了更好地理解这个概念 , 你可以看看我们的线性代数演示 。下图黄色部分是对红色方块应用线性变换
C的结果 。线性变换C是矩阵相乘AB的结果 , 其中A是相对于Y轴反射的变换矩阵 , [

如果我们改变矩阵乘法中[div]
A和B的顺序 , 会得到不同的结果 , 因为这相当于先应用B的切割变换 。

调换转置矩阵由一个公式定义 。换句话说 , 我们翻转矩阵的对角线 , 得到转置矩阵 。应当注意 , 矩阵对角线上的元素不受转置操作的影响 。
【线性代数:矩阵基本运算矩阵怎么进行加减】