前言:

线代老师推荐的软件,让我们逃离繁琐的计算/(ㄒoㄒ)/~~专注于想法

以下是octave中一些常用的线性操作,参考于:https://blog.csdn.net/iszhenyu/article/details/78712228:

向量/矩阵的生成

定义一个向量/矩阵

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6


>> A = [1 2; % ;号在这里的作用可以看做是换行符,也就是生成矩阵的下一行。
> 3 4;
> 5 6]
A =
1 2
3 4
5 6

>> V1 = [1 2 3]
V1 =
1 2 3

>> V2 = [1; 2; 3]
V2 =
1
2
3

矩阵生成的内置函数

ones(m, n) 函数生成一个m行n列的矩阵,矩阵中每个元的值为1。

zeros(m, n) 函数生成一个m行n列的矩阵,矩阵中每个元的值为0。

rand(m, n) 函数生成一个m行n列的矩阵,矩阵的每个元是0到1之间的一个随机数。

eye(m) 函数生成一个大小为m的单位矩阵。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>> ones(2, 3)
ans =
1 1 1
1 1 1

>> w = zeros(1, 3)
w =
0 0 0

>> w = rand(1, 3)
w =
0.19402 0.23458 0.49843

>> eye(4)
ans =
Diagonal Matrix
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

向量/矩阵的属性

默认创建了一个矩阵,方便下文说明
A =
1 2
3 4
5 6

矩阵的大小

内置size函数

size函数返回的结果也是一个矩阵,但这个矩阵的大小是1×2,这个1×2的矩阵中,两个元素的值分别代表了参数矩阵的行数和列数。

增加参数可以选择需要的数据size(A, 1)为行数,size(A, 2)为列数

1
2
3
4
5
6
7
8
9
>> sa = size(A);
>> sa
sa =
3 2

>> size(A, 1)
ans = 3
>> size(A, 2)
ans = 2

矩阵的维度

内置length函数

对于矩阵来说,它获取的是矩阵中最大的那个维度的值;对于向量来说,它获取的就是向量的维度了

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

>> length(V)
ans = 4

octave:67> length(A)
ans = 3

向量矩阵的运算

获取矩阵中的元素

获取矩阵指定行指定列的元素:使用括号取值,返回一个元素(注意,下标编号是从1开始的不是从0哦)

1
2
>> A(3, 2)
ans = 6

获取矩阵指定整行或整列的元素:括号中使用:代替行或列,返回一个向量

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

>> A(:, 2)
ans =
2
4
6

也可以指定要获取的某几行或某几列的元素:括号中使用方括号包含你想选择的列

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

>> A(:,[2])
ans =
2
4
6

矩阵的元素重新赋值:

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

>> A(1,:) = [11 22]
A =

11 22
3 4
5 6

矩阵进行扩展:(常用于增广矩阵)

1
2
3
4
5
>> A = [A [100; 101; 102]] 
A =
1 2 100
3 4 101
5 6 102

矩阵间的运算

设A,B,C三个矩阵

1
2
3
>> A*C
>> A/C
>> A^2

矩阵间的点运算

可以理解为对矩阵中每个元素做对应运算

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
>> A .^ 2
ans =
1 4
9 16
25 36

>> 1 ./ [1; 2; 3]
ans =
1.00000
0.50000
0.33333

%(A中的各个元素乘以B中对应位置的元素)
>> A .* B
ans =
11 24
39 56
75 96


%(特殊情况:当一个实数与矩阵做乘法运算时,我们可以省略.直接使用*即可)
>> -1 * [1; -2; 3] % 也可以简写为 -1[1; 2; 3]
ans =
-1
2
-3

矩阵的常用操作汇总 ( 重要!!)

pinv(A): 矩阵的逆

rref(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
>> V + ones(length(V), 1)  % V = [1; 2; 3]
ans =
2
3
4

% 矩阵的转置
>> A'
ans =
1 3 5
2 4 6

% 求矩阵的逆
>> pinv(A)
ans =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778

>> rref(A)
ans =

1 0 -1
0 1 2
0 0 0

求解线性方程组 ( 重要!!)

undefined