最近看机器学习相关教程,接触到了Octave,完全类似于Matlab,区别是Octave是免费的,而且叫轻量级,用起来也很方便。Octave的入门是很简单的,我参考的是网上的《Octave入门》:
http://www.baidu.com/s?wd=Octave+%E5%85%A5%E9%97%A8&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=2&rsv_sug1=2&rsv_sug4=24&rsv_n=2&inputT=1359
还有官网: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)