Octave知识集锦
GNU Octave是一种高级编程语言,主要用在数值计算领域,解决线性、非线性的问题。它和MATLAB有着类似的语法和能力,可以作为MATLAB的开源/免费替代品。
在机器学习领域,可以利用Octave快速的完成算法原型,并最终改用某种工业语言重新实现算法。
操作符/特殊字符 | 说明 |
% | 注释标记,后面的内容是注释 |
; | 抑制输出,默认情况下回车后会输出当前表达式的结果 |
'' | 字符串标记 |
= | 赋值 |
== ~= && || | 等于、不等于、与、或 |
<= >= | 小于等于、大于等于 |
+ - * / | 加减乘除 |
^ | 乘方 |
矩阵中每行用 ;分隔,每个元素用空格分隔:例如 A = [ 1 2; 3 4; 5 6]表示一个3x2矩阵。矩阵的每行可以分开写。
要获取某个元素,使用 A(3, 3),结果是个标量。要返回某行,使用 A(3,: ),结果是个行向量。要返回某列,使用 A(:,3),结果是个列向量。要返回多个行,使用 A([1,3],:),结果是矩阵,返回多个列类似。
A(:)表示把所有列串在一起,形成一个大的列向量。
要写入某个、某行、某列,或者多行、多列,使用赋值操作符,左侧如上一小段,右侧写恰当的标量、向量或矩阵。例如 A(:,2) = [10, 11, 12]表示赋值第2列。
要扩展一个矩阵,例如生成增广矩阵,可以使用: A = [A, [100; 101; 102]] 表示在矩阵右侧加上一个列向量。右侧A后面的逗号可以换为空格,效果一样。你还可以合并两个矩阵,例如 [A B]表示把B放在右侧, [A; B]则表示把B放在下面。
矩阵乘法: A*B;矩阵对应元素分别相乘: A .* B。
点运算可以理解为是对矩阵中每个元素做运算。例如每个元素进行平方 A .^ 2,每个元素求倒数 1 ./ [1; 2; 3]。标量和矩阵进行相乘时,点号可以省略(因为从数学上来说标量乘以矩阵本意即如点运算)。
要求转置矩阵,可以用 A'。
要求逆矩阵,可以用函数 pinv(A)。
A <= 1 表示对矩阵的每个元素进行逻辑判断,返回一个矩阵,元素是0或1对应逻辑判断的结果
行向量语法: v = [ 1 2 3 ],列向量语法: v = [ 1; 2; 3; ]。
v = 1:0.1:2表示一个数组(行向量),它的第一个元素是1,后一个元素总比前一个大0.1,最后一个元素是2。
v = 1:6 表示一个数组,类似上面,但是步长为1
定义函数,使用function关键字:
1 2 3 4 |
function [y1, y2] = calVal(x) y1 = x^2; y2 = x^3; end; |
函数可以有多个返回值,声明在function后的列表中,调用函数时,可以使用向量来接收返回值:
1 |
[a, b] = calVal(3) |
函数/命令 | 说明 |
PS1 | 设置命令提示符,例如 PS1('>>'); |
disp | 显示变量的值 |
sprintf | 类似于C语言的同名函数 |
format | 格式化变量,例如 format long以长整型格式化上个表达式的值,默认精度是short |
help | 显示某个命令的帮助 |
hist | 显示直方图 |
who | 显示工作空间中可用的变量 |
whos | 显示工作空间中可用的变量的详细信息 |
clear | 清除变量,如果后面不跟着变量名则清除所有 |
save | 将变量保存到文件,例如 save hello.mat V1 V2; |
pwd | 显示当前目录 |
函数/命令 | 说明 |
xor | 异或 |
参数是矩阵时,算术运算对矩阵的每个元素执行数值计算
函数/命令 | 说明 |
sqrt | 乘方 |
log | 自然对数 |
exp | 自然指数 |
abs | 绝对值 |
max | 最大值,例如 [val, idx] = max(a)表示求最大值并返回索引, val = max(a)则仅仅返回最大值 |
sum | 求矩阵所有元素之和 |
prod | 求矩阵所有元素之积 |
floor | 向下取整 |
ceil | 向上取整 |
函数/命令 | 说明 |
ones | 生成每个元素都是1的矩阵,例如 ones(2, 3)生成每个2行3列的矩阵 |
zeros | 生成零矩阵,类似ones |
rand | 生成随机矩阵,类似ones |
randn | 生成元素服从高斯分布(均值为0,标准差获方差为1)的矩阵 |
eye | 生成单位矩阵,例如 eye(4)生成4阶单位矩阵 |
size |
返回某个矩阵的尺寸,返回值是一个1x2矩阵,分别表示参数矩阵的行、列数量 如果想仅仅返回行数,使用 size(A,1),仅仅返回列数则使用 size(A,2) |
length |
返回向量的长度 |
pinv | 伪逆矩阵 |
inv | 逆矩阵 |
flipud | 第一行变为最后一行,第二行变为倒数第二行……最后一行变为第一行 |
1 2 |
V = zeros(10,1) % 创建长度为10的列向量 for i = 1:10, V(i) = i; end % 循环赋值 |
1 2 3 |
i = 1; while i <= 5, disp(V(i)); i = i+1; end; |
1 |
if length(v) > 1, disp(length(v)); end |
定义一个向量:
1 |
t = [0:0.01:0.98]; |
定义两个三角函数:
1 2 |
y1 = sin(2*pi*4*t); y2 = cos(2*pi*4*t); |
绘制第一个三角函数,自变量显示在横轴:
1 |
plot(t, y1); |
在上述图形上继续绘制(不清屏):
1 |
hold on |
继续绘制,并且指定曲线颜色为红色:
1 |
plot(t,y2, 'r'); |
指定图像的各种标签:
1 2 3 4 |
xlabel('time'); % 指定X轴的名称 ylabel('value'); % 指定Y轴的名称 legend('sin', 'cos'); % 标识第一条曲线是sin,第二条曲线是cos title('sin and cos function'); % 给图片附一个标题 |
关闭绘图窗口:
1 |
close |
Leave a Reply