6、Octave教程

变量

变量赋值

a = 3  % 输出a = 3
a = 4; % 添加了“;”不会输出, %为注释符号
View Code

变量打印

a = pi   % 输出a =  3.1416

disp(a)  % 输出 3.1416

% disp为打印函数

disp(sprintf('2 decimals: %0.2f',a))  % 输出2 decimals: 3.14

format long

a   % a =  3.141592653589793

format short

a  % a =  3.1416
View Code

基本运算符

%  +、-、*、/、^
5+6 % ans = 11
3-2  % ans = 1
5*8  % ans = 40
1/2  %ans=0.50000
2^6  % ans = 64

% 等于、不等于
1 == 2  % ans = 0
1 ~= 2  % ans = 1

%与、或、异或
1&&0  % ans = 0
1||0   % ans = 1
xor(1, 0)  % ans = 1
View Code

矩阵

创建矩阵

>> A = [1 2; 3 4; 5 6]   %2X3矩阵,""的作用是矩阵换行
A =

   1   2
   3   4
   5   6

>> V = 1:0.1:2  % 创建从1到2,间隔0.1的的行向量
V =

 Columns 1 through 8:

    1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000

 Columns 9 through 11:

    1.8000    1.9000    2.0000

>> V = 1:6 %创建1-6的行向量
V =

   1   2   3   4   5   6

>> ones(3)  %创建全1的3x3矩阵,ones(行,列),如果只有一个就代表行列相同
ans =

   1   1   1
   1   1   1
   1   1   1

>> ones(2,3)  %创建全1的2x3矩阵
ans =

   1   1   1
   1   1   1
>> c = 2*ones(2,3)
c =

   2   2   2
   2   2   2
>> zeros(3)
ans =

   0   0   0
   0   0   0
   0   0   0

>> zeros(2,3)
ans =

   0   0   0
   0   0   0

>> rand(5) %随机生成元素在[0, 1]之间的矩阵
ans =

   0.759038   0.356755   0.759957   0.765575   0.124526
   0.478474   0.748071   0.348113   0.140318   0.735799
   0.548857   0.919435   0.022937   0.766650   0.658001
   0.282714   0.682380   0.333799   0.646410   0.045325
   0.657188   0.273806   0.433459   0.812108   0.349532

>> rand(2,3)
ans =

   0.81680   0.65483   0.26669
   0.23447   0.64541   0.73921

>> randn(3) %随机生成元素服从正态分布(高斯分布)
ans =

  -1.772650   0.571952   2.728738
   0.096214   0.996951  -1.083561
   0.359641  -0.571054  -1.124300

>> randn(2,3)
ans =

   0.242999   0.326736   0.372448
  -0.785784  -0.086886  -0.571480
View Code
>> 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

>> w = -6 + sqrt(10)*(randn(1,10000));    % sqrt开根号
>> hist(w)    % 生成直方图
>> hist(w, 50)   % 50代表生成50个直方柱形
View Code

help eye帮助函数

移动数据

>> A = [1 2; 3 4; 5 6]  % 创建矩阵
A =

   1   2
   3   4
   5   6

>> size(A)    %返回矩阵的大小,返回结果也是一个矩阵
ans =

   3   2

>> size(A, 1)  % 返回矩阵的行数
ans =  3
>> size(A, 2)  % 返回矩阵的列数
ans =  2
>> length(A)   % 返回矩阵最大维度数
ans =  3
View Code
Pwd % 显示octave的当前所在目录
cd url  %改变当前工作目录
ls % 显示当前目录下的路径和文件
View Code
>> load my.txt   % 导入文件:load  path 或者 load(‘path’) path文件路径
>> my  % 文件名
my =

   1
   2
   3
   4
   5
   6
   7

>> load('my.txt')
>> my
my =

   1
   2
   3
   4
   5
   6
   7

>>
View Code
>> who  % who查看octave当前工作空间存储的所有变量
Variables in the current scope:

A    ans  my

>> whos  % whos查看octave当前工作空间存储的所有变量的详细信息
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        A           3x2                         48  double
        ans         1x17                        17  char
        my          7x1                         56  double

Total is 30 elements using 121 bytes
View Code
clear 变量名称  %删除变量

clear   %删除所有变量
View Code
% 把数据存入文件:  save 文件名字  变量名称;
>> A
A =

   1   2
   3   4
   5   6

>> save test.mat A;  %二进制存储
>> save test.txt A -ascii;  % 存储为ascii编码
View Code

取矩阵元素

>> A
A =

   1   2
   3   4
   5   6

>> A(1,1)
ans =  1
>> A(2,:) %’:’表示取该行或者该列的所有元素
ans =

   3   4

>> A(:,2)  
ans =

   2
   4
   6

>> A([1 3], :) %取第1、3行的所有列元素
ans =

   1   2
   5   6
View Code

修改矩阵的值

>> A(:,2)=[10;11;12] %重新赋值A的第二列元素
A =

    1   10
    3   11
    5   12

>> A = [A, [100;101;102]] %在A的后面再加一列元素
A =

     1    10   100
     3    11   101
     5    12   102

>> A(:) %把A的所有元素放入一个列向量 
ans =

     1
     3
     5
    10
    11
    12
   100
   101
   102

>>
View Code
A =

   1   2
   3   4
   5   6

>> B
B =

   11   12
   13   14
   15   16

>> C = [A B] %把AB矩阵左右结合为C矩阵
C =

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

>> D = [B A]
D =

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

>> D = [B, A]
D =

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

>> F = [A;B] %把AB矩阵上下结合为D矩阵
F =

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

矩阵运算

>> A
A =

   1   2
   3   4
   5   6

>> B
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 % A中对应元素乘B中对于元素,“.” 通常表示矩阵元素运算
ans =

   11   24
   39   56
   75   96

>> A.^2  % A中元素各自的平方
ans =

    1    4
    9   16
   25   36

>> 1./A % A中元素各自的倒数
ans = 

   1.00000   0.50000
   0.33333   0.25000
   0.20000   0.16667
>> log(A)  % 对A中元素求对数
ans =

   0.00000   0.69315
   1.09861   1.38629
   1.60944   1.79176

>> exp(A) % 以e为底A中元素为指数的幂运算
ans =

     2.7183     7.3891
    20.0855    54.5982
   148.4132   403.4288

>> abs(A)  % 对A中元素求绝对值
ans =

   1   2
   3   4
   5   6

>> -A
ans =

  -1  -2
  -3  -4
  -5  -6

>> abs(-A)
ans =

   1   2
   3   4
   5   6
View Code
>> A + 1 % 对A中的元素加1
ans =

   2   3
   4   5
   6   7

>> A + ones(length(A), 2)
ans =

   2   3
   4   5
   6   7

>> A' %A的转置矩阵
ans =

   1   3   5
   2   4   6

>> val = max(A) %求A中的每一列的 最大元素
val =

   5   6

>> [val, ind] = max(A)  % 返回值和索引
val =

   5   6

ind =

   3   3

>> A < 3  % A中元素与3比较正确返回1,错误返回0
ans =

  1  1
  0  0
  0  0

>> find(A < 3) %返回A中元素与3比较正确的索引
ans =

   1
   4

>> A
A =

   1   2
   3   4
   5   6
>> [r,c]=find(A<3)
r =

   1
   1

c =

   1
   2
View Code
>> A = magic(3) %生成任意行、列和每个对角线相加都相等的矩阵
A =

   8   1   6
   3   5   7
   4   9   2

>> sum(A) %每一列和
ans =

   15   15   15

>> prod(A) %每一列乘积
ans =

   96   45   84

>> floor(A) % 向下取整
ans =

   8   1   6
   3   5   7
   4   9   2

>> ceil(A) % 向上取整
ans =

   8   1   6
   3   5   7
   4   9   2

>> max(A) % 每一列的最大值
ans =

   8   9   7

>> max(A, [], 1) % 1表示列
ans =

   8   9   7

>> max(A, [], 2) % 2表示行
ans =

   8
   7
   9

>> flipud(A) % 表示使矩阵垂直翻转
ans =

   4   9   2
   3   5   7
   8   1   6

>> pinv(A)   % A的逆矩阵
ans =

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

数据可视化 

>> t = [0:0.01:0.98];   %创建步长为0.01的矩阵
>> 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)


>> plot(t, y2, 'r'); % 设置线颜色
>> xlabel('time');  % 设置x轴标签
>> ylabel('valve'); % 设置y轴标签
>> legend('sin','cos'); % 设置图形标签
>> print -dpng 'test.png';  % 保存图片为png
View Code

子图

>> t = [0:0.01:0.98];
>> y1 = sin(2*pi*4*t);
>> y2 = cos(2*pi*4*t);
>> subplot(1,2,1);  % 前两个参数表示把图分成 1X2格, 最后一个参数是指定当前工作使用哪一格
>> plot(t, y1);
>> subplot(1,2,2); % 当前工作使用第二格
>> plot(t, y2);
>> axis([0.5 1 -1 1]);  % 修改当前工作的图的坐标轴刻度,前两个表示x轴范围,后两个表示y轴范围
>> clf;  % 清除图形
View Code
>> 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

>> imagesc(A);  % 可视化矩阵
>> imagesc(A), colorbar, colormap gray;  % 修改颜色 灰度
View Code

close关闭图形窗口

控制语句

if...end;

if... else...end;

if...elseif..else...end;

>> a = 1;
>> if a >0,
    disp(a);
    end;
 1
View Code
>>a = 1;
>> if a==1, disp('a=1');else disp('a~=1');end;
a=1
View Code
>> a = 1;
>> if a>1, disp('a>1');
elseif a<1, disp('a<1');
else  disp('a==1');
end;
a==1
View Code

for...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
View Code

while...end;

>> i = 1;
>> v = zeros(10,1)
v =

   0
   0
   0
   0
   0
   0
   0
   0
   0
   0

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

   100
   100
   100
   100
   100
     0
     0
     0
     0
     0

>>
View Code

自定义函数:创建一个.m文件,文件名称和函数名称一样,文件内容如下:

  function 返回值1,... = 函数名称(参数1,...)

  函数主体;

% squareThisNumber.m文件

function y = squareThisNumber(x)

y=x^2;
View Code
>> pwd   % 查看当前工作目录
ans = /Users/huangjunyi
>> cd Desktop;   % 切换到函数文件目录
>> squareThisNumber(5)   % 直接使用函数
ans =  25
View Code

返回多个值

% squareAndCubeThisNumber.m文件

function [y1, y2] = squareAndCubeThisNumber(x)

y1 = x^2;
y2 = x^3;
View Code
>> [y1, y2] = squareAndCubeThisNumber(5)
y1 =  25
y2 =  125
View Code

计算损失函数

J(θ1, θ0) = ∑(θ1x+θ0-y)2/m

% costFunctionJ.m文件
function J = costFunctionJ(X, Y, theta)
  % X输入变量矩阵
  % y标签

  % 样本数量 
  m = size(X, 1); 

  % 计算预测值
  predictions = X*theta;  
  
   % 计算平方差
  sqrErrors = (predictions - Y).^2; 
  
  %均方误差 MSE
  J = 1/(2*m)*sum(sqrErrors);  
  
  
endfunction
>> X = [1 1; 1 2; 1 3];   %特征
>> Y = [1;2;3];  % 标签
>> theta = [0;1];  % 权重
>> costFunctionJ(X, Y, theta)
ans = 0

矢量化

多因素线性回归假设方程:h(x) = θ0x01x1+..+θnxn

未矢量化octave代码如下:

Prediction = 0.0
for j=1:n+1,   % octave矩阵下标从1开始
    prediction = prediction + theta(j)*x(j)
end;

矢量化假设方程:h(x)=θTX

矢量化代码如下:

Prediction = theta’ * X;

梯度下降函数(没理解需要重看)

原文地址:https://www.cnblogs.com/jp-mao/p/10180663.html