Octave语法小结

1.正常的算术运算

1*2
1+2
5/6


2.正常的逻辑判断

1==2
1~=2
1&&0
xor(1,0)
1||0

Note: false : 0     true : 1




3.格式

format long    %长格式输出
format short   %短格式输出

tips:
1.如果运行一条语句后不想打印结果就在结尾加上';' 即 a=3 will print a=3
but if a=3;   will print nothing.
2.字符串不是""而是example: b='hi';
3.eg:  a=pi;
disp(a);
将打印3.1416
disp(sprintf('2 decimals:%0.2f',a));
将打印
2 decimals:3.14



4.向量和矩阵

A = [1 2; 3 4; 5 6]
行向量  v = [1 2 3]
列向量  v = [1; 2; 3]
v = 1:0.1:2
将创建行向量 1.0000 1.1000 ... 2.0000,1行11列
v = 1:6
       1 2 3 4 5 6
ones(2,3)       %2行3列全1阵
c = 2*ones(2,3)        %全2阵
zeros(1,3)      %全0阵
rand(3,3)        %0-1的随机数矩阵
randn      %高斯随机
hist(w)     %将w以直方图形式展现
eye(3)      %谐音取自I 单位矩阵  3*3   不懂可以help eye


5.移动数据

size(A)          %返回3 2,即一个1行2列的结果,代表A的大小:3行2列  
size(A,1)       %返回行数
size(A,2)       %返回列数
length(A)       %返回最大维度的大小
v = [1 2 3 4]
length(v) = 4
pwd/cd/ls   在octave中也可以正常使用
桌面上有featuresX.dat和pricesY.dat
想读进来
load featuresX.dat 或 load('pricesY.dat')
who              %显示出当前octave路径中储存的变量
whos            %显示得更详细
clear featuresX   可以删掉featuresX变量
clear   全删
v = pricesY(1:10)   %前10个取出
保存:save hello.mat v;
save hello.txt v -ascii     %save as text(ASCII)
取矩阵中某个值
A = [1 2; 3 4; 5 6]
A(3,2) = 6
A(2,:)       %取2行所有元素   ':'取所有
A([1 3],:)  %1行和3行所有列取出
A想加1列    A=[A,[100; 101; 102]]
A中所有元素导出成一个列向量   A(:)


6.Octave中的运算

A = [1 2; 3 4; 5 6]
C = [1 1; 2 2]
A*C    %得到矩阵乘法的结果
B = [11 23; 42 56; 32 10]
A .* B  %每个元素对应相乘     '.'一般表示元素位运算
A .^ 2   %每个元素取平方运算
1 ./ A   %除法也可
v 如果是个向量         v = [1; 2; 3]
log(v) 每个向量取log        exp(v)   e指数运算
abs(v)取绝对值
想将v中每个元素+1
v + ones(length(v),1)  或  v+1
转置A'
a = [1 15 2 0.5]
val = max(a)        %val = 15
[val ind] = max(a) % val = 15 ind =2索引值
如果A = [1 2; 3 4; 5 6]
max(A)是对它的每一列求最大值
如果a<3 将对它的每个元素<运算  =>  [1 0 1 1]
如果find(a<3)将索引值输出 => [1 3 4]
A = magic(3)  得到3*3的魔方矩阵(对角线,行,列的和一样)
[r c] = find(A>=7)    r为行 c为列
sum(a)求和
prod(a)乘积
floor(a)  a中元素向下取整
ceil(a)    向上取整
max(rand(3),rand(3)) 两个rand(3)逐个元素比较取最大值
max(A,[],1)                %得A每列最大值   和max(A)等价
max(A,[],2)                %得A每一行最大值
想得到A中最大值max(max(A))   或 max(A(:))
eye(9)
想要另一个对角线全1
fliplr/flipud表示向上/向下翻转
A = magic(3)
pinv(A)   求逆矩阵(伪)


7.Octave Plotting Data

t = [0:0.01:0.98]
y1=sin(2*pi*4*t)
plot(t,y1)
y2=cos(2*pi*4*t)
plot(t,y2)
但是将替换原有图
若想两个同时显示plot(t,y1);hold on;plot(t,y2,'r');
如果想标记横/纵坐标用xlabel('time')        ylabel('value')
legend('sin','cos')            %将出现这两条线的说明
title('my plot')
如果想保存这个图
print -dpng 'myPlot.png'
close      %关闭图像
如果想显示两个窗口两个图    figure(1); plot(t,y1); figure(2); plot(t,y2);
如果一个窗口显示两个窗口图内容
subplot(1,2,1); plot(t,y1);        %1*2窗口,用1窗口显示
改变(缩放)横纵轴
axis([0.5 1 -1 1])            %0.5-1横轴范围    -1 - 1纵轴范围
clf;                                 %清除一个图像(窗口)
如果你是一个矩阵     A=magic(5);
imagesc(A)                   %用5*5的彩色图表示矩阵
imagesc(A), colorbar, colormap gray;        %同时运行了三个命令   

 

8.Octave 过程

for, while, if
v = [1 2 3 4 5 6 7 8 9 10];
for i=1:10
     v(i) = 2^i;
end
break和continue也正常使用
if 和 while最后也需要有end作为结果


9.Octave的向量化

有时候你研究一个算法,有循环,但如果你用好线性向量库,会提高很多效率,比如
求theta(j)*x(j)    j=0...n   
我们可以把theta和x分别看成一个n+1维向量,向量的乘法即是循环


10.Octave中的优化算法

在选择算法时,会有优于梯度下降法以供选择,如Conjugate gradient, BFGS, L-BFGS. Octave会自动选择其中之一运行(一般远优于梯度下降法)
需要做的仅仅是
function [jVal, gradient] = costFunction(theta)
             jVal = [...code to compute J(theta)..];
            gradient = [...code to compute derivative of J(theta)];
end
然后使用
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);


11.矩阵组合与恢复

当使用BP算法是需要对theta多维向量进行组合,并在求costFunction的时候进行恢复,因而需要对矩阵进行组合和恢复操作。
Theta1 = ones(10,11);
Theta2 = 2*ones(10,11);
Theta3 = 3*ones(10,11);
initialTheta = [ Theta1(:); Theta2(:); Theta3(:) ];
当进入costFunction后
Theta1 = reshape(initialTheta(1:110), 10, 11);
Theta2 = reshape(initialTheta(111:220), 10, 11);
Theta3 = reshape(initialTheta(221:330), 10, 11);




你可能感兴趣的:(octave)