最近看機器學習相關教程,接觸到了Octave,完全類似於Matlab,區別是Octave是免費的,而且叫輕量級,用起來也很方便。Octave的入門是很簡單的,我參考的是《Octave入門教程》:http://www.linuxidc.com/Linux/2014-04/99848.htm
還有官網:http://www.gnu.org/software/octave/
官網手冊:http://www.gnu.org/software/octave/doc/interpreter/index.html
下面記錄一些常用的函數或者雜項。
● 自定義函數,格式是:
function [ret1, ret2 ...]=fname(arg1, arg2 ...)
%
% 函數說明
%
......
endfunction
arg1,arg2為傳入的參數,ret1,ret2為返回值,這些參數都可以是矩陣或者數值。function中一般用不著return語句,因為函數體中可以直接訪問ret1,ret2並進行修改。
● for語句的使用
格式1:
for variable=vector
.......
end
variable為循環變量,vector為需要循環的所有值的數組,例如:
a = [1, 2, 3];
for var = a
格式1:
for variable=start:end
.....
end
start:end其實是Octave中支持的連續列表(如1:10),這種方式是非常常用的,例如從1到10的循環可寫成:
for i=1:10 %或者for i=[1:10]
.....
end
● 有時候需要生成隨機矩陣,Octave中提供了rand函數和randn函數,區別是:
(1)rand:產生均值為0.5、幅度在0~1之間、均勻分布的隨機矩陣
(2)randn:產生均值為0方差為1、幅度在0~1之間、的高斯白噪聲(即正太分布)
(3)normrnd(a,b,c,d):產生均值為a方差為b、幅度在0~1之間、大小為cXd的隨機矩陣
有時候需要整數矩陣,可以使用ceil函數(上取整)、floor函數(下取整)或round函數(四捨五入)將上面得到的0~1之間的矩陣變成整數矩陣,例如要得到5 X 4的分布在0-100之間的隨機矩陣,可以寫成: ceil(100*rand(5,4))。
● 求矩陣的特征值用函數 eig(A),求零空間的基用nulbasis,如下例先求特征值再求特征空間的基,某特征值λ的特征空間的基也就是(A- λ*I)的零空間:
● rref函數求矩陣的簡化階梯型,可以利用其求解線性方程組。例如:
x1 + x2 = 3
2x1 + 3x2 = 8
因此x1 = 1,x2 = 2
● 擴展矩陣函數:repmat,常用格式:repmat(X, m, n)