今天来说下Matlab
中矩阵和幻方矩阵的创建方法。矩阵是指一个n
行m
列的一些数字组成的矩形阵列,而幻方矩阵(也有人称作魔方矩阵)指的是是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。本文分为以下五个方面列出关于矩阵和幻方矩阵的使用:关于矩阵、输入矩阵、矩阵求和转置和对角矩阵、magic矩阵、生成矩阵。
关于矩阵
在MATLAB®环境中,矩阵是由很多数字组成的n
行m
列矩形数组。特殊情况下,1×1
矩阵(即标量)和只包含一行或一列的矩阵(即向量)会附加特殊含义。MATLAB
采用其他方法来存储数值数据和非数值数据,但刚开始时,通常最好将一切内容都视为矩阵。
MATLAB
旨在尽可能简化运算。其他编程语言一次只能处理一个数字,而MATLAB
允许您轻松快捷地处理整个矩阵。所以,在Matlab
中,我们可以用矩阵作运算时,往往不使用循环来运算。
本手册中使用的有效示例矩阵摘自德国艺术家和业余数学家Albrecht Dürer
在文艺复兴时期的雕刻 Melencolia I
。如下图所示:
这幅图布满了数学符号,通过仔细观察,您会发现右上角有一个矩阵。此矩阵称为幻方矩阵,在Dürer
所处的时代,此幻方矩阵被视为富有真正的神秘性质。它具有某些值得让人深究的迷人特征。
输入矩阵
开始学习MATLAB
的最佳方法是了解如何处理矩阵。启动MATLAB
并按照每个示例操作。
您可以采用多种不同方法在MATLAB
中输入矩阵:
- 依次输入每个矩阵元素。
- 从外部数据文件加载矩阵。
- 使用
Matlab
内置函数生成矩阵。 - 使用自创的函数创建矩阵,并将其保存在文件中。
首先,以元素列表的形式输入丢勒的矩阵。您只需遵循一些基本约定:
- 使用空格或逗号分隔行的元素。
- 使用分号
;
表示每行末尾。 - 使用方括号
[ ]
将整个元素列表括起来。
要输入丢勒矩阵,只需在命令行窗口中键入即可
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
此矩阵与雕刻中的数字一致。输入矩阵之后,MATLAB
工作区会自动记住此矩阵。您可以将其简称为A
。现在,您已经在工作区中看到A
的值了,让我们看看它为什么如此有趣吧。它有什么神奇的地方呢?
矩阵求和、转置和对角矩阵
您可能已经注意到,幻方矩阵的特殊属性与元素的不同求和方法相关。如果沿任何行或列求和,或者沿两条主对角线中的任意一条求和,您将始终得到相同数字。让我们使用 MATLAB 来验证这一点。尝试的第一个语句是
>> sum(A)
ans =
34 34 34 34
如果未指定输出变量,MATLAB 将使用变量ans
(answer的缩略形式)来存储计算结果。您已经计算包含A
的列总和的行向量。每个列的总和都相同,即幻数和34。
行总和如何处理?MATLAB 会优先处理矩阵的列,因此获取行总和的一种方法是转置矩阵,计算转置的列总和,然后转置结果。
MATLAB 具有两个转置运算符。撇号运算符(例如,A'
)执行复共轭转置。它会围绕主对角线翻转矩阵,并且还会更改矩阵的任何复数元素的虚部符号。点撇号运算符 (A.'
) 转置矩阵,但不会影响复数元素的符号。对于包含所有实数元素的矩阵,这两个运算符返回相同结果。
因此我们可以确认下A‘的输出:
>> A'
ans =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
>> sum(A')'
ans =
34
34
34
34
有关避免双重转置的其他方法,请在sum
函数中使用维度参数:sum(A,1)表示按列求和,sum(A,2)表示按行求和。一般情况下,我们更愿意使用这种方法分别求和。
>> sum(A,2)
ans =
34
34
34
34
使用sum
和diag
函数可以获取主对角线上的元素的总和:
>> diag(A)
ans =
16
10
7
1
>> sum(diag(A))
ans =
34
其中,diag
函数可以列出矩阵的对角线元素;而sum(diag(A))
即为求对角线元素和。
从数学上讲,另一条对角线(即所谓的反对角线)并不是十分重要,因此MATLAB
没有对此提供现成的函数。但原本用于图形的函数fliplr
可以从左往右地翻转矩阵:
>> sum(diag(fliplr(A)))
ans =
34
您已经验证丢勒雕刻中的矩阵确实是一个幻方矩阵,同时在验证过程中,您已经尝试了几个MATLAB
矩阵运算。下面各部分继续使用此矩阵来演示MATLAB
的其他功能。
magic 函数
MATLAB
实际包含一个内置函数,该函数可创建几乎任意大小的幻方矩阵。此函数命名为magic
也就不足为奇了:
>> B = magic(4)
B =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
此矩阵几乎与丢勒雕刻中的矩阵相同,并且具有所有相同的“神奇”性质;唯一区别在于交换了中间两列。
您可以交换B
的中间两列,使其看起来像丢勒A
。针对B
中的每一行,按照指定顺序(1、3、2、4)对列进行重新排列:这个更换矩阵行号或者列号的方法也很重要。
>> A = B(:,[1 3 2 4])
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
生成矩阵
MATLAB
软件提供了四个用于生成基本矩阵的函数:
zeros | 全部为零 |
ones | 全部为 1 |
rand | 均匀分布的随机元素 |
randn | 正态分布的随机元素 |
下面给出了一些示例:
>> Z = zeros(2,4)
Z =
0 0 0 0
0 0 0 0
>> F = 5*ones(3,3)
F =
5 5 5
5 5 5
5 5 5
>> N = fix(10*rand(1,10))
N =
8 9 1 9 6 0 2 5 9 9
>> R = randn(4,4)
R =
-1.3499 0.7147 1.4090 0.7172
3.0349 -0.2050 1.4172 1.6302
0.7254 -0.1241 0.6715 0.4889
-0.0631 1.4897 -1.2075 1.0347
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/2905.html