octave基本语法

基本运算

octave:3> 5+6
ans =  11
octave:4> 3-2
ans =  1
octave:5> 8*9
ans =  72
octave:6> 8/4
ans =  2
octave:7> 6/4
ans =  1.5000
octave:8> 2^6
ans =  64
octave:9>

注释:% 表示注释符号

octave:9> 1 == 2 %false
ans = 0
octave:10> 1~=2
ans = 1
octave:11> 1 && 0 % AND
ans = 0
octave:12> 1 || 0 % OR
ans = 1
octave:13> xor(1,0) % 异或
ans = 1
octave:14>

改变提示符:octave:14> PS1('>> '); ,' ' 内表示所选提示符

>> a=3
a =  3
>> a=3;%加上分号将不会显示
>> a
a =  3
>> a=3;
>> a=2
a =  2
>> a=2;%加上分号将不会显示
>> b='hi' 
b = hi 
>> c=(3>=1) 
c = 1
>> a=pi
a =  3.1416
>> disp(a)
3.1416
>> disp(sprintf('2 decimals: %0.2f',a)) % 类似于C语言的输出语句
decimals: 3.14

矩阵和向量:

>> A = [1 2; 3 4; 5 6]
A =
  4

>> A=[1 2;
4;
6]
A =
  4

>> V=[1 2 3]
V =
  3

>> V=[1;2;3]
V =

>> V=1:0.1:2
V =

 Columns 1 through 7:

    1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000

 Columns 8 through 11:

    1.7000    1.8000    1.9000    2.0000

>> V=1:6
V =
  3   4   5   6

>> ones(2,3)  % 生成全1矩阵
ans =
  1
  1

>> 2*ones(2,3)
ans =
  2
  2

>> C=[2 2 2;2 2 2]
C =
  2
  2

>> w=ones(1,3)
w =
  1

>> w=zeros(1,3)  % 生成全0矩阵
w =
  0

>> w=rand(1,3)  % 生成随机数矩阵
w =

   0.76244   0.97843   0.82005

>> w=rand(3,3) %产生随机数矩阵,范围0~1
w =

   0.844846   0.070033   0.276175
   0.330128   0.777480   0.369802
   0.015571   0.482700   0.163547

>> w = randn(1,3) %产生服从高斯分量的随机矩阵
w =

   0.63218   0.16167  -0.34970

>>

绘制直方图:

>> w=-6 + sqrt(10)*(randn(1,10000));
>> hist(w)

绘制更多竖条的直方图(50个):

>> hist(w,50)  % hist绘图

单位矩阵:

>> i=eye(4)   % 单位矩阵
i =

Diagonal Matrix
  0   0
  0   0
  1   0
  0   1

可输入help命令获得帮助,如:

help eye

help rand

>> size(A)  % 矩阵A的大小 长 宽

>> length(B)  % 矩阵B的长度

>> pwd  % 当前路径

>>cd  % 切换目录

>> ls  % 当前路径下的文件

>> load featuresX.dat  % 加载featuresX.dat文件

>> who  % 显示当前所有变量
>> whos  % 显示当前所有变量

>> save hello.mat v -ascii;  % 把变量v中的数据存到hello.mat 文件中 以ascii编码

>> A(3,2)  %获取第三行第二列元素
>> A(3,:)  %获取第三行所有元素

# 高级索引
>> A([1 3 ],:)  %第一行 第三行所有元素


>> A(:,2)=[10;11;12]  %把第二列换成 10 11 12

>> A = [A,[100;101;102]]  % 个数组A追加一列

>> A(:)   % 把矩阵A中元素列优先 ,全部存成一列

>> C=[A B]  % [A,B]把A B 矩阵合并成C(横着)

>> C=[A; B]  % 把A B 矩阵合并成C(竖着)

>>

矩阵运算

>> A*B  % 传统的矩阵乘法

>> A .*B  % 对应位置元素相乘

>> A .^B  % 每个元素平方

>> 1 ./ A  % 数组A的倒数

>> log(A)  % 对A内元素取对数

>> exp(A)  % 以e为底幂运算

>>abs(A)  % 取绝对值

>> v + ones(length(v),1)  % 所有元素加1

>> A ’  % A的转置

>> [val ,ind] = max(A)  % A的最大值放在val中 A的最大值的索引放在ind中

>> A<3  % A中元素小于3时为1 大于3时为0 返回整个数组的结果

>> B = masgic(3)  %生成幻方矩阵 (行列斜 元素之和相等)

>> sum(A)  % A中元素求和

>> prod(A)  % A中元素求积

>> floor(A)  % 向下取整

>> ceil(A)  % 向上取整

>> max(A,[],1)  % 每列最大值

>> max(A,[],2)  % 每行最大值

>> sum(A,1)  % 每一列的总和

>> eye(3) % 三阶单位阵

>> pinv(A)  % 求逆矩阵(伪)
>> t= [0:0.01:0.98]  % 0.00到0.98的99个数据

>> 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');  %red红色曲线

>> xlabel('time')
>> ylabel('value')  % xy轴的标签


>> legend('sin','cos')
>> title('my plot')  % 标题以及标注

>> print -dpng 'myplot.png'  % 把图片存下来

>> figure(1); plot(t,y1);
>> figure(1); plot(t,y1);  % 同时显示两幅图

>> subplot(1,2,1);
>> plot(t,y1)
>> subplot(1,2,2);
>> plot(t,y2)  % 将两幅图显示在一幅图片上

>> axis([1.5 1 -1 1])  % 坐标的范围

>> A=magic(5)
>> imagesc(A)  % 把矩阵用色块展示
>> imagesc(A),colorbar,colormap gray;  % 用灰色色块展示矩阵

>>a=1,b=2,c=3  %逗号:命令一个一个的执行

循环

>> for i=1:10,
>     v(i) = 2^i;
>  end;
>> v
v =

      2      4      8     16     32     64    128    256    512   1024


>> indices=1:10;
>> indices
indices =

    1    2    3    4    5    6    7    8    9   10

>> for i = indices,
>     disp(i);
> end;
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10

 >> v
v =

      2      4      8     16     32     64    128    256    512   1024

>> i=1;
>> while i <=5,
>     v(i)=100;
>     i=i+1;
> end;
>> v
v =

    100    100    100    100    100     64    128    256    512   1024

>>


>> i=1;
>> while true,
>     v(i)=999;
>     i=i+1;
>     if i == 6,
>         break;
>     end;
>   end;
>> v
v =

    999    999    999    999    999     64    128    256    512   1024

>> 


>> v(1)
ans =  999
>> v(1)=2;
>> if v(1)==1,
>     disp('the value is one ');
>  elseif v(1)==2,
>     disp('the value is two');
>  else
>     disp('the value is not one or two');
>  end;
the value is two
>>

如何定义和调用函数

1.新建squareThisNumber.m文件,内容如下:

function y = squareThisNumber(x)
y = x^2;

把搜索路径加上

>> % Octave search  path (advanced/optional)
>> addpath('D:\06AI\octave')

运行函数

>> squareThisNumber(5)
ans =  25
  1. 多返回值

新建squareAndCubeThisNumber.m文件,内容如下

function [y1,y2]=squareAndCubeThisNumber(x)

y1=x^2;
y2=x^3;

执行结果

>> [a,b]= squareAndCubeThisNumber(5)
a =  25
b =  125
  1. costfunction
function J = costFunctionJ(X,y,theta)

% X is the "design matrix" containing our training examples
% y is the class labels

m=size(X,1);    % number or training examples
predictions = X*theta;    % predictions or hypothesis on all m
examples
sqrErrors= (predictions-y).^2;

J = 1/(2*m)*sum(sqrErrors);

运行

>> X=[1 1 ; 1 2; 1 3]
X =

   1   1
   1   2
   1   3

>> y=[1;2;3]
y =

   1
   2
   3


>> J = costFunctionJ(X,y,theta)
J = 0
>>
>> theta =[0;0];
>> J = costFunctionJ(X,y,theta)
J =  2.3333
>> (1^2 + 2^2 + 3^2)/(2*3)
ans =  2.3333

6-6高级优化

新建costFunction.m文件,内容如下

function [jVal,gradient] =costFunction(theta)

jVal = (theta(1)-5)^2+(theta(2)-5)^2;

gradient = zeros(2,1);
gradient(1)=2*(theta(1)-5);
gradient(2)=2*(theta(2)-5);

octave窗口执行

>> options = optimset('GradObj','on','MaxIter','100');    % 100次迭代
>> initialTheta = zeros(2,1)    % 猜测theta的初始值  必须大于1维
initialTheta =

   0
   0


>> [optTheta,functionVal,exitFlag]=fminunc(@costFunction,initialTheta,options)    % 优化算法找到theta的最优解
optTheta =

   5.0000
   5.0000

functionVal =    7.8886e-31
exitFlag =  1     % exitflag告诉你算法是否收敛
>>