zoukankan      html  css  js  c++  java
  • 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;

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

  • 相关阅读:
    JDBC_PreparedStatement
    JDBC_Statement
    JDBC连接数据库
    Oracle语句
    MySQL用户和权限
    MySQL执行计划
    MySQL创建索引
    MySQL正则表达式
    MySQLshow查询
    MySQL多表连接和分页查询
  • 原文地址:https://www.cnblogs.com/jp-mao/p/10180663.html
Copyright © 2011-2022 走看看