前言:
线代老师推荐的软件,让我们逃离繁琐的计算/(ㄒoㄒ)/~~专注于想法
以下是octave中一些常用的线性操作,参考于:https://blog.csdn.net/iszhenyu/article/details/78712228:
>> 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的单位矩阵。
>> 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)为列数
>> sa = size(A);
>> sa
sa =
3 2
>> size(A, 1)
ans = 3
>> size(A, 2)
ans = 2
内置length
函数
对于矩阵来说,它获取的是矩阵中最大的那个维度的值;对于向量来说,它获取的就是向量的维度了
>> V = [1 2 3 4]
V =
1 2 3 4
>> length(V)
ans = 4
octave:67> length(A)
ans = 3
获取矩阵指定行指定列的元素:使用括号取值,返回一个元素(注意,下标编号是从1开始的不是从0哦)
>> A(3, 2)
ans = 6
获取矩阵指定整行或整列的元素:括号中使用:
代替行或列,返回一个向量
>> A(3,:)
ans =
5 6
>> A(:, 2)
ans =
2
4
6
也可以指定要获取的某几行或某几列的元素:括号中使用方括号包含你想选择的列
>> A([1, 3],:)
ans =
1 2
5 6
>> A(:,[2])
ans =
2
4
6
>> A(:,2) = [10, 11, 12]
A =
1 10
3 11
5 12
>> A(1,:) = [11 22]
A =
11 22
3 4
5 6
>> A = [A [100; 101; 102]]
A =
1 2 100
3 4 101
5 6 102
设A,B,C三个矩阵
>> A*C
>> A/C
>> A^2
可以理解为对矩阵中每个元素做对应运算
>> 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'
:矩阵的转置
>> 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