
3.1 向量、矩阵和数组
像MATLAB和很多其他用于数值计算的计算机语言一样,Julia提供简单、方便且很强大的处理向量和矩阵的方法。例如,如果你想生成如下这样的向量和矩阵。

在Julia中,你只需要简单地输入如下代码。

其中分号;表示新的一行。Julia返回结果如下所示。

我们可以用A[i,j]访问A的(i,j)元素。

用下面的代码很容易就可以得到向量和矩阵的转置。

让我们引入两组列向量。

内积或点积可以用下面的方式获得。

另一种获得点积的方式是使用dot()函数。该函数由Julia的标准库提供,被称作LinearAlgebra(线性代数)包。

关于LinearAlgebra(线性代数)包的更多有用的功能,请参考官方文档(见参考资料[29])。
特定大小的恒等矩阵如下所示。

定制的0和1的矩阵如下所示。


当我们有一个如下的方阵时。

它的逆矩阵能被计算出来。

当然,其中有一些数值错误。

注意:非对角线元素不全是0,这是因为逆矩阵计算并不精确。例如,矩阵B的逆矩阵的(2,1)元素不是1,而是如下所示。

上面,我们见过类似于Int64和Float64这样的数据;在32位系统中,它应该是Int32和Float32;这些是数据类型。如果你确定向量和矩阵中的元素是整数类型的,那么可以使用Int64。相反,如果有任何一个元素是非整型数值,如1.0000000000000004,那么你需要使用Float64。这些设置通常是自动完成的。

在某些情况下,你会希望先生成特定类型的数组对象,然后再赋值。这可以通过调用带有undef关键词的数组来完成。例如,如果我们想要一个Float64类型的数组,并且它含有3个元素,那么我们可以这样做。

一些接近0的值是被预先赋值的,你可以按照自己的意愿给数组赋值。


尽管你输入的是精确的整型数值,结果数组将是Float64类型的,正如它最初被定义的那样。
如果你的数组代表一个向量或一个矩阵,我建议你通过显式地指定具体维度来创建数组。例如,对一个3行1列的列向量,你只能用下面的函数。

对一个1行3列的行向量,你只能用下面的函数。

那么它们的乘积能被写成p×q或q×p。
更多与数组相关的函数,请参见官方文档(参考资料[30])。