综合技术

算法练习(12):矩阵详解(1.1.33)

知识点

  • 绘点
  • 随机函数

1.1.33矩阵库。编写一个Matrix库并实现以下API

题目

题目

编写一个测试用例,从标准输入读取矩阵并测试所有方法

分析

书中第一次出现矩阵的例子是代码:

int N = a.length;
double[][] c = new double[N][N];
for (int i = 0; i < N; i++)
   for (int j = 0; j < N; j++)
   { // Compute dot product of row i and column j.
      for (int k = 0; k < N; k++)
         c[i][j] += a[i][k]*b[k][j];
}

这段代码的作用是计算矩阵的乘积。那么,什么是矩阵呢?这里我们从头来了解矩阵。先看一下这个人:

阿瑟·凱萊

这个人叫阿瑟·凱萊,又译为凯利,他是矩阵(Matrix)的创始人。

使用Java实现矩阵

由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。

由本题中提供的表格来看要表示一个矩阵只需要一个二维数组即可。

向量(Vector)

本题中除了矩阵还提到了向量,那向量又是什么,跟矩阵有何区别与联系呢?

其实我们可以把向量当作一个点(a,b)。它与矩阵的区别是:

向量可以用矩阵表示,且有时特殊矩阵就是向量。 简言之就是矩阵包含向量。

点乘(dot)

在数学中,数量积(dot product; scalar product,也称为点积、点乘)是接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。

坐标表示:已知两个非零向量$a=(x_1,y_1),b=(x_2,y_2)$,则有$a·b=x_1x_2+y_1y_2$,即两个向量的数量积等于它们对应坐标的乘积的和。

矩阵的运算

乘积

两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。乘积矩阵的行数等于左边矩阵的行数,乘积矩阵的列数等于右边矩阵的列数 。

那么,我们怎么理解矩阵的乘法呢?这里给个知乎中的答案用于参考:

矩阵乘法的本质是什么?

大概总结一下:

小明今天要做饭,消耗2斤肉,1斤蔬菜。肉每斤20元,蔬菜每斤5元,则一共需多少花费?

这个问题的答案很简单:

$20 times 2+5 times 1= 45$

我们用向量相乘的方法写出来:

$$

left[

begin{matrix}

20 & 5\

end{matrix}

right]

left[

begin{matrix}

2 \

1 \

end{matrix}

right] =

45

$$

如果小明第二天有另一种做饭的方法,需要消耗1斤肉,4斤蔬菜,那么这两种方法的花费各是多少呢?我们显然需要另算这第二种方法的花费。把这个做饭方式写在第二个矩阵(向量是宽度或长度为1的矩阵)里:

$$

left[

begin{matrix}

20 & 5\

end{matrix}

right]

left[

begin{matrix}

2 & 1\

1 & 4\

end{matrix}

right] =

left[

begin{matrix}

45 \

40 \

end{matrix}

right]

$$

以此类推,可以推导出矩阵乘法的含义。

阅读原文...

小专栏

【913VR】 VR企业-开放式创新绩效调查问卷

上一篇

UICollectionView Cell Resizing on Device Rotation

下一篇

你也可能喜欢

评论已经被关闭。

插入图片
算法练习(12):矩阵详解(1.1.33)

长按储存图像,分享给朋友