Matlab:数组

# matlab

(一)基本运算与矩阵输入

1 创建数组

一维数组称为向量,二维数组称为矩阵
可以使用中括号“[ ]”,直接输入数值来创建数组,也可以通过MATLAB内置函数来创建特殊数组

1.1 直接创建

元素间使用空格或者英文逗号间隔,使用英文分号执行换行操作

1
2
3
4
5
6
7
>>A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3
4 5 6
7 8 9

1.2 内置函数创建特殊数组

  • zeros(m,n) —-创建m×n阶全零矩阵
  • ones(m,n) —-创建m×n阶全幺阵
  • rand(m,n) —-生成一个由介于 0 和 1 之间的均匀分布的随机数组成的 m×n 矩阵
  • randi(imax,n) —-生成一个元素在区间 [1,imax] 的均匀离散分布的伪随机整数的 n×n 矩阵
  • magic(n) —-生成n×n阶魔方矩阵
  • diag(A) —-返回一个列向量,其元素为由矩阵A的对角线元素
  • diag(V) —-V是一个向量(行向量、列向量结果相同),返回一个对角矩阵,其对角元素为向量V的元素

zeros(m,n) —-创建m×n阶全零矩阵

1
2
3
4
5
6
>> zeros(2,3)

ans =

0 0 0
0 0 0

ones(m,n) —-创建m×n阶全幺阵

1
2
3
4
5
6
>> ones(2,3)

ans =

1 1 1
1 1 1

rand(m,n) —-生成一个由介于 0 和 1 之间的均匀分布的随机数组成的 m×n 矩阵

1
2
3
4
5
6
>> rand(2,3)

ans =

0.7655 0.1869 0.4456
0.7952 0.4898 0.6463

randi(imax,n) —-生成一个元素在区间 [1,imax] 的均匀离散分布的伪随机整数的 n×n 矩阵

1
2
3
4
5
6
7
>> randi(5,3)

ans =

3 2 5
1 5 2
1 2 5

magic(n) —-生成n×n阶魔方矩阵

1
2
3
4
5
6
7
>> A=magic(3)

A =

8 1 6
3 5 7
4 9 2

diag(A) —-返回一个列向量,其元素为由矩阵A的对角线元素

1
2
3
4
5
6
7
>> diag(A)

ans =

8
5
2

diag(V) —-V是一个向量(行向量、列向量结果相同),返回一个对角矩阵,其对角元素为向量V的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> A=[1 2 3];
>> diag(A)

ans =

1 0 0
0 2 0
0 0 3

>> diag(A')

ans =

1 0 0
0 2 0
0 0 3

2 数组索引(Index)

数组中的每个元素都有两个属性
1)元素的值
2)元素在数组中的位置

1
**注意:MATLAB数组索引从1开始!而不是0!!**

以三阶魔方矩阵 A=[8 1 6;3 5 7;4 9 2] 为例

  • A(id) —-按列索引数组第id个元素
  • A(m,n) —-返回数组A第m行第n列对应的元素
  • A([l m n]) —-返回一个行向量,元素为数组A第l、m、n个元素
  • A(l m; p q) —-返回一个2×2阶矩阵,其元素第一行为数组A第l、m个元素,第二行为数组A第p、q个元素
  • A(m, : ) —-返回一个行向量,其元素为数组A第m行元素
  • A(:, n) —-返回一个列向量,其元素为数组A第n列元素
  • A([m n], p) —-返回数组A第m行、第n列与第p行相交的元素

A(id) —-按列索引数组第id个元素

1
2
3
4
5
6
7
8
9
10
11
12
13
>> A=magic(3)

A =

8 1 6
3 5 7
4 9 2

>> A(6)

ans =

9

A(m,n) —-返回数组A第m行第n列对应的元素

1
2
3
4
5
6
>> A(2,3)

ans =

7

A([l m n]) —-返回一个行向量,元素为数组A第l、m、n个元素

1
2
3
4
5
>> A([1,3,5])

ans =

8 4 5

A(l m; p q) —-返回一个2×2阶矩阵,其元素第一行为数组A第l、m个元素,第二行为数组A第p、q个元素

1
2
3
4
5
6
>> A([1 3;1 3])

ans =

8 4
8 4

A([m,n], [p,q]) —-返回一个2×2阶矩阵,其元素为数组A第m行、第n行与第p列、第q列相交的元素,即[m,n]代表行(row),[p,q]代表列(col)

1
2
3
4
5
6
>> A([1 3],[1 3])

ans =

8 6
4 2

A(m,:) —-返回一个行向量,其元素为数组A第m行元素

1
2
3
4
5
>> A(2,:)

ans =

3 5 7

A(:, n) —-返回一个列向量,其元素为数组A第n列元素

1
2
3
4
5
6
7
>> A(:,2)

ans =

1
5
9

A([m n], p) —- 返回数组A第m行、第n列与第p行相交的元素

1
2
3
4
5
6
>> A([1 3], 2)

ans =

1
9

3 数组运算

3.1 等差数组

A(l: m: n) —-生成一个等差数组,首项=l,等差=m(默认为1),尾项=n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> A=[1:9]

A =

1 2 3 4 5 6 7 8 9

>> B=[1:2:9]

B =

1 3 5 7 9

>> C=[1:2:5; 2:4]

C =

1 3 5
2 3 4

3.2 数组串联(合并)

C=[A B] ,C=[A; B] —-将维度一致的两个数组合并为一个数组

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
>> A=[1 2; 3 4]

A =

1 2
3 4

>> B=[5 6; 7 8]

B =

5 6
7 8

>> C=[A B]

C =

1 2 5 6
3 4 7 8

>> C=[A;B]

C =

1 2
3 4
5 6
7 8

3.3 删除元素(删除某一行、某一列)

A(m)=[ ] —-删除数组A第m个元素,并返回一个行向量

1
2
3
4
5
6
7
8
9
10
11
12
13
>> A=magic(3)

A =

8 1 6
3 5 7
4 9 2

>> A(3)=[]

A =

8 3 1 5 9 6 7 2

A(m, :)=[ ] —-返回删除数组A第m行后缩短的数组(列操作同理)

1
2
3
4
5
6
7
8
9
10
11
12
13
>> A=magic(3)

A =

8 1 6
3 5 7
4 9 2
>> A(2,:)=[]

A =

8 1 6
4 9 2

3.4 数组操作

1
数组操作符:+  -  *   /   ^   .   '

1. 数组A与标量a

  • A+a, A-a —-数组A的每个元素加 a、减 a
  • A*a —-数组A每个元素乘 a
  • A.*a —-数组A每个元素乘 a
  • A/a —-数组A每个元素除以 a
  • A./a —-数组A每个元素除以 a
  • A^a —-a个数组A相乘
  • A.^a —-数组A的每个元素进行a次方
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
>> A=magic(3)

A =

8 1 6
3 5 7
4 9 2

>> a=2;
>> A+a

ans =

10 3 8
5 7 9
6 11 4

>> A-a

ans =

6 -1 4
1 3 5
2 7 0

>> A*a

ans =

16 2 12
6 10 14
8 18 4

>> A.*a

ans =

16 2 12
6 10 14
8 18 4

>> A/a

ans =

4.0000 0.5000 3.0000
1.5000 2.5000 3.5000
2.0000 4.5000 1.0000

>> A./a

ans =

4.0000 0.5000 3.0000
1.5000 2.5000 3.5000
2.0000 4.5000 1.0000

>> A^a

ans =

91 67 67
67 91 67
67 67 91

>> A.^a

ans =

64 1 36
9 25 49
16 81 4

2. 数组与数组

  • A+B, A-B —-数组A、B对应元素向加减
  • A*B —-数组A左乘数组B
  • A.*B —-数组A与数组B对应元素相乘
  • A/B —-A/B≈A_inv(B),其中A_inv(B)中的B必须为方阵
  • A./B —-数组A除以数组B的对应元素
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
>> A=magic(3)

A =

8 1 6
3 5 7
4 9 2

>> B=randi(5,3)

B =

1 4 1
3 5 5
5 4 5

>> A+B

ans =

9 5 7
6 10 12
9 13 7

>> A-B

ans =

7 -3 5
0 0 2
-1 5 -3

>> A*B

ans =

41 61 43
53 65 63
41 69 59

>> A.*B

ans =

8 4 6
9 25 35
20 36 10

>> A/B

ans =

-0.8750 -1.0000 2.3750
-0.8125 2.0000 -0.4375
2.6250 -1.0000 0.8750

>> A./B

ans =

8.0000 0.2500 6.0000
1.0000 1.0000 1.4000
0.8000 2.2500 0.4000

3.矩阵运算

    • B’ —-矩阵B转置
  • rank(B) —-矩阵B的秩
  • inv(A) —-方阵A求逆
  • det() —-方阵A的行列式
  • size(A) —- [[matlab:获取数组的大小]]返回一个行向量,其元素是 A 的相应维度的长度,即A的大小
  • length(A) —-返回A中最大维度的长度。对于向量,长度仅仅是元素数量。对于具有更多维度的数据,长度为 max(size(X))。空数组的长度为零。
  • D=eig(A) —-返回方阵A的特征值D
  • [V D]=eig(A) —-返回方阵A的特征值D和特征向量V
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
A=magic(3)

A =

8 1 6
3 5 7
4 9 2

>> A'

ans =

8 3 4
1 5 9
6 7 2

>> rank(A)

ans =

3

>> inv(A)

ans =

0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028

>> det(A)

ans =

-360

>> size(A)

ans =

3 3

>> length(A)

ans =

3

>> D=eig(A)

D =

15.0000
4.8990
-4.8990

>> [V D]=eig(A)

V =

-0.5774 -0.8131 -0.3416
-0.5774 0.4714 -0.4714
-0.5774 0.3416 0.8131


D =

15.0000 0 0
0 4.8990 0
0 0 -4.8990

Reference