算术运算

octave:1> 5+6
ans =  11
octave:2> 3-2
ans =  1
octave:3> 5*8
ans =  40
octave:4> 1/2
ans =  0.50000
octave:5> 2
ans =  2
octave:6> 2^6
ans =  64

逻辑运算

octave:7> 1==2
ans = 0
octave:8> 1~=2
ans = 1
octave:9> 8>1 && 0
ans = 0
octave:10> 9>1 || 1
ans = 1
octave:11> xor(1,0)
ans = 1
octave:12>

定制octave命令行提示

octave:12> PS1('>>>')
>>>
>>>

变量赋值

>>>a=3
a =  3
>>>a=3;
>>>

对变量赋值时,使用分号,即形如 a=3; ,可以抑制打印输出

利用disp命令和sprintf命令一起可以完成格式化输出

>>>disp(a)
 3
>>>disp(sprintf('2 decimals: %.2f', a))
2 decimals: 3.00
>>>

向量矩阵

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

   1   2
   3   4
   5   6

>>>

矩阵快速生成方式

>>>v=1:6
v =

   1   2   3   4   5   6

>>>v=ones(2,3)
v =

   1   1   1
   1   1   1

>>>v=rand(3,3)
v =

   0.492887   0.253071   0.516081
   0.022844   0.585264   0.200849
   0.696016   0.864906   0.757668

>>>randn(1,3)
ans =

   0.49692   0.19770  -1.92125

>>>eye(3)
ans =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

获取矩阵的长度

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

   1   2
   3   4
   5   6

>>>size(a)
ans =

   3   2

>>>
>>>
>>>size(a, 1)
ans =  3
>>>length(a)
ans =  3
>>>
>>>

变量查看

>>>whos
Variables in the current scope:

   Attr Name           Size                     Bytes  Class
   ==== ====           ====                     =====  =====
        a              3x2                         48  double
        ans            1x3                          3  char
        featuresX      7x2                        112  double
        priceY         7x1                         56  double

Total is 30 elements using 219 bytes



>>>who
Variables in the current scope:

a          ans        featuresX  priceY

数据加载及保存

>>>load featuresX.dat
>>>load priceY.dat
>>>save hello.mat ans
>>>save hello.txt ans -ascii

删除变量

>>>clear
>>>clear ans

矩阵访问方式

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

   1   2
   3   4
   5   6

>>>a(3, 2)
ans =  6
>>>a(2, :)
ans =

   3   4

>>>a(:, 2)
ans =

   2
   4
   6

>>>a([1 2], :)
ans =

   1   2
   3   4

>>>a(:, 2)=[10; 11; 12]
a =

    1   10
    3   11
    5   12

>>>a=[a, [100; 101; 102]]
a =

     1    10   100
     3    11   101
     5    12   102

>>>a(:)
ans =

     1
     3
     5
    10
    11
    12
   100
   101
   102

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

   1   2
   3   4
   5   6

>>>b=[11 12; 13 14; 15 16]
b =

   11   12
   13   14
   15   16

>>>c=[a b]
c =

    1    2   11   12
    3    4   13   14
    5    6   15   16

>>>c=[a; b]
c =

    1    2
    3    4
    5    6
   11   12
   13   14
   15   16

>>>

 矩阵运算

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

   1   2
   3   4
   5   6

>>>b=[11 12; 13 14; 15 16]
b =

   11   12
   13   14
   15   16
>>>c=[1 1; 2 2]
c =

   1   1
   2   2

>>>a * c
ans =

    5    5
   11   11
   17   17

>>>a .* b
ans =

   11   24
   39   56
   75   96

>>>a .^ 2
ans =

    1    4
    9   16
   25   36
>>>1 ./ a
ans =

   1.00000   0.50000
   0.33333   0.25000
   0.20000   0.16667

>>>1 ./ c
ans =

   1.00000   1.00000
   0.50000   0.50000

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

   1
   2
   3

>>>log(V)
ans =

   0.00000
   0.69315
   1.09861

>>>exp(V)
ans =

    2.7183
    7.3891
   20.0855

>>>abs(V)
ans =

   1
   2
   3

>>>V + ones(length(V), 1)
ans =

   2
   3
   4

>>>V + 1
ans =

   2
   3
   4

>>>1 .+ V
ans =

   2
   3
   4

>>>a
a =

   1   2
   3   4
   5   6

>>>a'
ans =

   1   3   5
   2   4   6

>>>a = [1 15 2 .5]
a =

    1.00000   15.00000    2.00000    0.50000

>>>val=max(a)
val =  15
>>>[val, ind] = max(a)
val =  15
ind =  2
>>>a<3
ans =

  1  0  1  1

>>>find(a<3)
ans =

   1   3   4

>>>A=magic(3)
A =

   8   1   6
   3   5   7
   4   9   2

>>>find(A>=7)
ans =

   1
   6
   8

>>>[r, c]=find(A>=7)
r =

   1
   3
   2

c =

   1
   2
   3

>>>a
a =

    1.00000   15.00000    2.00000    0.50000

>>>sum(a)
ans =  18.500
>>>prod(a)
ans =  15
>>>floor(a)
ans =

    1   15    2    0

>>>ceil(a)
ans =

    1   15    2    1

>>>max(rand(3), rand(3))
ans =

   0.24528   0.30296   0.74424
   0.97481   0.40352   0.33233
   0.94606   0.96147   0.38318

>>>A
A =

   8   1   6
   3   5   7
   4   9   2

>>>max(A)
ans =

   8   9   7

>>>max(A,[],2)
ans =

   8
   7
   9

>>>max(A,[],1)
ans =

   8   9   7

>>>max(A,1)
ans =

   8   1   6
   3   5   7
   4   9   2

>>>max(max(A))
ans =  9
>>>max(A(:))
ans =  9
>>>A=magic(5)
A =

   17   24    1    8   15
   23    5    7   14   16
    4    6   13   20   22
   10   12   19   21    3
   11   18   25    2    9

>>>sum(A, 1)
ans =

   65   65   65   65   65

>>>sum(A, 2)
ans =

   65
   65
   65
   65
   65

>>>sum(sum(A .* eye(5)))
ans =  65
>>>eye(5)
ans =

Diagonal Matrix

   1   0   0   0   0
   0   1   0   0   0
   0   0   1   0   0
   0   0   0   1   0
   0   0   0   0   1

>>>flipud(eye(5))
ans =

Permutation Matrix

   0   0   0   0   1
   0   0   0   1   0
   0   0   1   0   0
   0   1   0   0   0
   1   0   0   0   0

>>>flipud(eye(5))
ans =

Permutation Matrix

   0   0   0   0   1
   0   0   0   1   0
   0   0   1   0   0
   0   1   0   0   0
   1   0   0   0   0

>>>A=magic(3)
A =

   8   1   6
   3   5   7
   4   9   2

>>>pinv(A)
ans =

   0.147222  -0.144444   0.063889
  -0.061111   0.022222   0.105556
  -0.019444   0.188889  -0.102778

>>>A*pinv(A)
ans =

   1.00000  -0.00000   0.00000
   0.00000   1.00000  -0.00000
  -0.00000   0.00000   1.00000

>>>

 绘图

>> t=[0:0.01:0.98];
>> y1 = sin(2*pi*4*t);
>> plot(t,y1);

输入close命令可以关闭图像

hold on 命令可在原图像中再添加新曲线

octave:6> plot(t,y1);
octave:7> hold on;
octave:8> y2=cos(2*pi*4*t);
octave:9> plot(t, y2, 'r')
octave:10> xlabel('time')
octave:11> ylabel('value')
octave:12> legend('sin', 'cos')
octave:13> title('my plot')
octave:14> cd D:;print -dpng 'myplot.png'

同时绘几张图片

>> figure(1); plot(t, y1);
>> figure(2); plot(t, y2);

subplot可以将图片分割,同时在不同的图片上作画

 

octave:20> subplot(1,2,1);
octave:21> plot(t,y1);
octave:22> subplot(1,2,2);
octave:23> plot(t,y2);
octave:24> axis([0.5 1 -1 1])

利用clf可以清除图像

可视化矩阵imagesc

octave:26> a=magic(15);
octave:27> imagesc(a);

octave:28> imagesc(a), colorbar, colormap gray;

在octave中,使用 逗号, 和 分号; 作为命令连接最终效果都是一样的,但是使用分号可以不打印输出

控制流

octave中控制语句有for while if,均以end作为结束标志

 

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

      2
      4
      8
     16
     32
     64
    128
    256
    512
   1024

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

>> 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;

上述各种控制流中,使用逗号作为换行标志,但使用时直接换行也是可以的

函数

octave中函数可以定义在一个文件中,文件名应以.m结束。使用该函数时,就将该函数的路径加入octave的环境中(addpath('path'))

octave中的函数可以同时返回多个参数

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


function [y1, y2] = squareAndCubeThisNumber(x)
y1 = x^2;
y2 = x^3;

一个线性拟合例子

>> x = [1 1; 1 2; 1 3];
>> y = [1; 2; 3];
>> theta = [0;1];
>> j = costFunctionJ(X,y,theta)

函数为

function J = costFunctionJ(X,y,theta)
m = size(X,1);
predictions = X*theta;
sqrErrors = (predictions-y).^2;
J = 1/(2*m) * sum(sqrErrors);

 

posted on 2018-02-01 19:47  啊哈咧  阅读(1778)  评论(0编辑  收藏  举报