前言:
线代老师推荐的软件,让我们逃离繁琐的计算/(ㄒ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 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 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
|
求解线性方程组 ( 重要!!)