矩阵和数列

MATLAB 的全称是矩阵实验室。所以这个算是matlab的主要功能之一了。

数列其实是只有一行的矩阵,而在matlab中所有的变量其实都是以矩阵的方式存在的。

新建数列

空格和’,’放在中括号里就可以新建数列,甚至可以混用,但是不建议这么写。

1
[1,2 3]

Output:

1
2
3
ans =

1 2 3

这里的ans是matlab未命名结果变量时存储结果的地方,matlab作为一个计算机而非正式的编程语言,尽可能的方便用户使用而减少报错机会。除了数学原因很少报错。所以它是比其他程序设计语言好学不少的(除了python)

新建矩阵

新建矩阵,即多行数列有三种主流方式,换行和用;和用函数。

1
2
3
a = [1 3 5
2 4 6
7 8 10]


1
a = [1 3 5; 2 4 6; 7 8 10]

Output相同,为:
1
2
3
4
5
a =

1 3 5
2 4 6
7 8 10

也可以用函数快捷新建特定矩阵
1
zero(n,m) %新建一个n*m的零矩阵

如:
1
z = zeros(5,1)

Output:
1
2
3
4
5
6
7
8
z =

0
0
0
0
0

矩阵操作

对矩阵进行算术运算,相当于对其每个元素进行算数运算。

1
2
3
4
5
a + 10
a - 10
a * 2
a / 2
sin(a)

output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ans =

11 12 13
14 15 16
17 18 19


ans =

-9 -8 -7
-6 -5 -4
-3 -2 -1


ans =

2 4 6
8 10 12
14 16 18


ans =

0.5000 1.0000 1.5000
2.0000 2.5000 3.0000
3.5000 4.0000 4.5000


ans =

0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 0.4121

在真正有力量的环节:
求转置矩阵

1
a'

output:
1
2
3
4
5
6

ans =

1 4 7
2 5 8
3 6 9

求逆矩阵:
1
2
inv(a)
a*inv(a)

output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ans =

1.0e+16 *

-0.4504 0.9007 -0.4504
0.9007 -1.8014 0.9007
-0.4504 0.9007 -0.4504

警告: 矩阵接近奇异值,或者缩放不良。结果可能不准确。RCOND = 1.541976e-18。


ans =

2 0 2
8 0 0
16 0 8

. ,.^ 与 ^

单走一个*意思是进行矩阵乘法。而 .* 是对单个元素进行数乘,^类似。

值得一提的是,数乘的另一操作符可以不是数,而是另一矩阵,相当把两矩阵元素一一对应进行运算。

1
2
3
a.*3
a.^2
a.^a

output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ans =

3 6 9
12 15 18
21 24 27


ans =

1 4 9
16 25 36
49 64 81


ans =

1 4 27
256 3125 46656
823543 16777216 387420489

矩阵串联

,代表横着串联

;代表竖着串联:

1
2
3
4
[a,a]
[a;a]
[a,a;a,a]
[a,a;a]

output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ans =

1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9


ans =

1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9


ans =

1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9
1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9

错误使用 vertcat
要串联的数组的维度不一致。

最后的输出错误也显示了,矩阵串联时维度要一致,可是发现第三行竟然可以运行,说明了其并不是严格的按照从左到右的形式串联的,可以看出matlab的语法还是非常人性化(不严谨)的。

复数

直接用a+bi表示就完了,i也可以用j替代。输出的都是以i表示。