美文网首页
Octave常用语法

Octave常用语法

作者: 东皇Amrzs | 来源:发表于2017-02-05 23:06 被阅读1098次

    大体内容是转的,但是绘图部分做了补充和修改。

    向量


    • 分号:分割行
    • 空格或逗号:分割列

    创建与访问

    行向量

    空格或逗号分割

    >> v = [1 2 3] % 等效:v = [1, 2, 3]
    v =
       1   2   3
    >> v(2) % 只有一行,所以指定就是列
    ans =  2
    

    列向量

    • 分号分割
    >> v = [1; 2; 3]
    v =
       1
       2
       3
    >> v(2) % 只有一列,所以指定就是行
    ans =  2
    

    矩阵


    • 与向量一样,空格或逗号分割列,分号分割行
    • 冒号:代表所有,所有行或所有列

    创建

    >>   A = [1, 2; 3, 4] % 一行写完
    A =
       1   2
       3   4
    >> A = [1, 2; % 分行写
    > 3, 4]
    A =
       1   2
       3   4
    

    创建技巧

    • a:c --- 从a到c
    • a:b:c --- 从a,间隔b,到c
    • 向量也可以用这样的方法创建
    >> A = [1:3; 4:6]
    A =
       1   2   3
       4   5   6
    >> A = [1:2:5; 2:2:6]
    A =
       1   3   5
       2   4   6
    

    特殊矩阵


    单位矩阵

    >> eye(3) % 单位矩阵
    ans =
    Diagonal Matrix
       1   0   0
       0   1   0
       0   0   1
    >> flipud(eye(3))
    ans =
    Permutation Matrix
       0   0   1
       0   1   0
       1   0   0
    

    转置矩阵

    A =
       1   2
       3   4
    >> A'
    ans =
       1   3
       2   4
    

    逆矩阵

    A =
       1   2
       3   4
    >> pinv(A)
    ans =
      -2.00000   1.00000
       1.50000  -0.50000
    >> pinv(A) * A
    ans =
       1.00000   0.00000
      -0.00000   1.00000
    

    全1矩阵

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

    全0矩阵

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

    随机矩阵

    >> rand(1, 3) % 0~1的随机数,1行3列
    ans =
       0.99291   0.65946   0.95102
    

    高斯分布矩阵

    >> randn(1, 3) % 高斯分布
    ans =
       0.14646   2.02587   1.33266
    

    访问


    • 冒号:代表所有,所有行或所有列

    访问元素

    A =
       1   2   3
       4   5   6
       7   8   9
    >> A(2, 2) % 第二行,第二列,先定行再定列
    ans =  5
    

    访问单行或单列

    >> A(1, :) % 第一行,所有,元素
    ans =
       1   2   3
    >> A(:, 2) % 第二列,所有,元素
    ans =
       2
       5
       8
    

    访问多行或多列

    >> A(:, [1, 3]) % 第一列和第三列,所有,元素
    ans =
    
       1   3
       4   6
       7   9
    
    >> A([1, 3], :) % 第一行和第三行,所有,元素
    ans =
    
       1   2   3
       7   8   9
    

    连接

    • C = [A B],把B按列加到A上,生成C
    • C = [A; B],把B按行加到A上,生成C

    添加元素

    >> A = [1]
    A =  1
    >> A = [A, 2] % 把2,按列,添加到A上,再赋给A
    A =
       1   2
    >> A = [A; 3] % A有两列,3只有一列,规模不匹配
    error: vertical dimensions mismatch (1x2 vs 1x1)
    

    添加行或列

    >> A = [A; [3, 4]] % 将向量[3, 4],作为行,添加到A上,在赋给A
    A =
       1   2
       3   4
    >> A = [A, [5; 6]] % 将向量[5, 6],作为列,添加到A上,在赋给A
    A =
       1   2   5
       3   4   6
    

    矩阵连接

    >> A = [1, 2; 3, 4]
    A =
       1   2
       3   4
    >> B = [5, 6; 7 ,8]
    B =
       5   6
       7   8
    >> [A; B] % 将B,作为行,添加到A上
    ans =
       1   2
       3   4
       5   6
       7   8
    所有的数据放入一个向量中
    >> A
    A =
       1   2
       3   4
    >> A(:)
    ans =
       1
       3
       2
       4
    >> A(:)'
    ans =
       1   3   2   4
    

    赋值


    • 在访问基础上,给定相同规模的数据
    A =
       1   2   3
       4   5   6
       7   8   9
    >> A(3, 3) = 10 % 修改单个元素的值
    A =
        1    2    3
        4    5    6
        7    8   10
    >> A(1, :) = [0, 0, 0] % 修改一行的值
    A =
        0    0    0
        4    5    6
        7    8   10
    >> A(2:3, 2:3)
    ans =
        5    6
        8   10
    >> A(2:3, 2:3) = [0, 0; 0, 0] % 修改指定矩阵的值
    A =
       0   0   0
       4   0   0
       7   0   0
    

    运算


    加,减

    >> A = [1 1; 1 1]
    A =
       1   1
       1   1
    >> B = [2 2; 2 2]
    B =
       2   2
       2   2
    >> A + B
    ans =
       3   3
       3   3
    >> A - B
    ans =
      -1  -1
      -1  -1
    >> A - 1
    ans =
      0  0
      0  0
    

    相乘

    >> A = [1 2; 3 4]
    A =
    
       1   2
       3   4
    
    >> B = [5 6; 7 8]
    B =
    
       5   6
       7   8
    
    >> A * B
    ans =
    
       19   22
       43   50
    
    >> -A % -1 * A
    ans =
    
      -1  -2
      -3  -4
    

    点运算


    对应元素运算

    • 维度相同:对应元素相乘
    • 行维度相同:每行对应元素相乘
    • 列维度相同:每列对应元素相乘
    • A .* B = B .* A
    • 乘 *;除 /; 平方 ^;等

    维度相同

    A =
       1   1
       1   1
    B =
       2   3
       2   3
    >> A .* B
    ans =
       2   3
       2   3
    

    行维度相同

    A =
       1   1
       1   1
    B =
       5   6
    >> A .* B
    ans =
       5   6
       5   6
    

    列维度相同

    A =
       1   1
       1   1
    B =
       5
       6
    >> A .* B
    ans =
       5   5
       6   6
    

    点除

    • 矩阵乘以常数,A * 2,除可以是,A / 2
    • 反过来,2 * A没问题,2 / A 就不行,要用2 ./ A
    A =
       1   2
       3   4
    >> 1 ./ A
    ans =
       1.00000   0.50000
       0.33333   0.25000
    

    逻辑


    • 每一个元素做比较,标记0或1
    • &gt, <, ==, !=(或~=), &&, ||
    A =
       1   2
       3   4
    >> A > 2
    ans =
       0   0
       1   1
    

    位运算


    • 或 | ,函数xor
    • 且 &
    • 非 ~
    • 异或 ^

    控制语句


    if

    i =  1
    >> if i == 1
    >     disp(1)
    >  elseif i == 2
    >     disp(2)
    >  else
    >     disp(3)
    >  end
    

    for

    >> for i = 1:3 % 从1到3
    >     disp(i)
    >  end
     1
     2
     3
    

    while

    >> while i <= 3
    >     disp(i)
    >     i = i + 1
    >  end
     1
     2
     3
    

    break,continue

    • 与C、C++、Java没有区别

    函数


    • size:获取矩阵维度
    • length:获取最大维度
    • who:变量列表
    • whos:变量详情
    • clear 变量名:删除指定变量
    • clear:删除所有变量
    • find:返回符合条件元素的下标
    • log:log以e为底
    • exp:e的多少次方
    • abs:绝对值
    • floor:向下取整
    • ceil:向上取整
    • sum:求和
    • prop:求积

    size

    • 获取矩阵维度
    A =
    
       1   2
       3   4
       5   6
    >> aSize = size(A)
    aSize =
       3   2
    >> size(A, 1) % 3行
    ans =  3
    >> size(A, 2) % 2列
    ans =  2
    

    length

    • 获取最大维度
    A =
       1   2
       3   4
       5   6
    >> length(A) % 输出最大维度
    ans =  3
    

    who

    变量列表

    >> who % 现在都有哪里变量
    Variables in the current scope:
    
    A          aSize      ans        featuresX  w
    

    whos

    变量详情

    >> whos % 变量详情
    Variables in the current scope:
    
       Attr Name           Size                     Bytes  Class
       ==== ====           ====                     =====  =====
            A              3x2                         48  double
            aSize          1x2                         16  double
            ans            1x20                        20  char
            featuresX     27x2                        432  double
            w              1x10000                  80000  double
    
    Total is 10082 elements using 80516 bytes
    

    clear

    删除变量

    >> clear featuresX
    >> who
    Variables in the current scope:
    
    A      aSize  ans    w
    >> clear % 清除全部变量
    >> who % 一个变量都没有了
    

    find

    返回符合条件元素的下标

    A =
    
       5   6
       7   8
    
    >> [r, c] = find(A > 6) % 符合要求的是:第二行第一个和第二行第二个
    r =
    
       2
       2
    
    c =
    
       1
       2
    

    sum

    求和

    >> A = [1, 2; 3, 4]
    A =
    
       1   2
       3   4
    
    >> sum(A) % 等效:sum(A, 1)
    ans =
    
       4   6
       
    >> sum(A, 2)
    ans =
    
       3
       7
    

    prod
    求积

    >> A
    A =
    
       1   2
       3   4
    
    >> prod(A) % 等效:prod(A, 1)
    ans =
    
       3   8
    
    >> prod(A, 2)
    ans =
    
        2
       12
    

    max

    • 向量
    >> a = [1 5 2 3.3]
    a =
       1.0000   5.0000   2.0000   3.3000
    >> max(a)
    ans =  5
    >> [val, ind] = max(a)
    val =  5
    ind =  2
    
    • 矩阵比较
      两个矩阵比较每个元素,保留大的
    >> A = rand(3)
    A =
       0.2620788   0.6346345   0.4659161
       0.0880455   0.1258945   0.0079559
       0.0296765   0.7917592   0.4321800
    >> B = rand(3)
    B =
       0.039237   0.672424   0.214649
       0.491320   0.362929   0.197626
       0.821090   0.675265   0.698960
    >> max(A, B)
    ans =
       0.26208   0.67242   0.46592
       0.49132   0.36293   0.19763
       0.82109   0.79176   0.69896
    
    • 行与列的最大值
      参数二:与之比较的矩阵参数三:按行还是按列
    >> A = [1 2; 3 4]
    A =
       1   2
       3   4
    >> max(A) % 每列最大值
    ans =
       3   4
    >> max(A, [], 1) % 每列最大值
    ans =
       3   4
    >> max(A, [], 2) % 每行最大值
    ans =
       2
       4
    

    randperm

    生成乱序序列

    >> A = [2, 3, 4 ,5 ,6]
    A =
    
       2   3   4   5   6
    >> rand_indices = randperm(length(A))
    rand_indices =
    
       1   2   4   5   3
    >> A(:, rand_indices(1:3))
    ans =
    
       5   6   2
    

    自定义函数


    创建步骤


    • 创建存放函数的文件(文件名要与函数名相同,.m结尾)
    square.m
    
    • 创建函数
    % 一个返回值
    function 返回值 = 函数名(参数列表)
        函数体
    end
    % 多个返回值
    function [返回值1, 返回值2] = 函数名(参数列表)
        函数体
    end
    
    function y = square(x)
      y = x^2;
    end
    function [y1, y2] = squareAndCube(x)
      y1 = x^2;
      y2 = x^3;
    end
    

    调用


    进入到存放函数文件的目录
    添加存放函数文件的目录,到,搜索路径

    >> cd Downloads/ % 进入存放函数文件的目录
    >> square(2)
    ans =  4
    
    >> addpath('~/Downloads') % 添加到搜索路径
    >> cd ..
    >> square(2)
    ans =  4
    

    数据

    路径

    与Linux命令一样

    >> pwd % 当前路径
    ans = /Users/XXX
    
    >> cd ~/Developer
    
    >> pwd
    ans = /Users/XXX/Developer
    
    >> ls % 列出目录文件和文件夹
    
    >> cd .. % 回到上级目录
    

    载入与保存

    >> load featuresX.dat % 载入数据,变量名为featuresX
    >> data = load('ex1data1.txt'); % 变量名为data
    
    >> save featuresX.mat featuresX; % 将featuresX中的数据保存到featuresX文件中
    >> save hello.txt v -ascii % 将变量v中得数据已ascii编码方式保存到hello.txt中
    

    其他


    命令

    • 简化命令行:PS1('>> ');
    • 关闭图表:close或close all
    • 命令行清屏:clc

    注释

    %后为注释

    打印


    自动打印

    a = 3 % 会打印数据
    a = 3; % 不会打印数据,分号可以防止输出
    

    格式化

    disp(pi) % 输出:3.1416
    disp(sprintf('pi is %.2f', pi)) % c语言风格
    

    默认格式

    format long % 修改默认打印格式
    

    帮助


    help size % 查看size函数的帮助文档
    help help % 查看help函数的帮助文档
    

    绘图


    plot

    属性

    • LineWidth:线宽
    • MarkerFaceColor:标记颜色
    • MarkerSize:标记大小
    t = [0:0.1:0.98];
    y1 = sin(2*pi*4*t);
    plot(t,y1);
    y2 = cos(2*pi*4t);
    
    hold on ;  %  使用 hold on 可以将接下来绘制的函数放在一张图里
    
    plot(t, y2, 'r'); % 第三个参数,表示颜色
    
    xlabel('time');
    ylabel('value');  %  标记出x和y轴
    
    legend('sin','cos') %  在图像右上角,用来区分多个函数的图例,依次表示两个曲线所表示的内容
    
    tiitle('my plot') %  在图像的正上方给图像加上标题
    
    print -dpng 'myPlot.png'  % 输出图像,保存在'pwd'目录下
    
    close % 关闭图像
    
    figure(1); plot(t,y1); % 新开第一个窗口绘制y1
    figure(2); plot(t,y1); % 新开第二个窗口绘制y2
    
    % pos为向量中为1的行序号组成的向量,neg为向量中为0的行序号组成的向量 
    plot(X(pos,1),X(pos,2),'k+','LineWidth',2,'MarkerSize',7); 
    plot(X(neg,1),X(neg,2),'ko','markerFaceColor','y','MarkerSize',7);
    
    Paste_Image.png
     Format arguments:
        linestyle
              '-'  Use solid lines (default).
              '--' Use dashed lines.`
              ':'  Use dotted lines.
              '-.' Use dash-dotted lines.
        markerstyle
              '+'  crosshair
              'o'  circle
              '*'  star
              '.'  point
              'x'  cross
              's'  square
              'd'  diamond
              '^'  upward-facing triangle
              'v'  downward-facing triangle
              '>'  right-facing triangle
              '<'  left-facing triangle
              'p'  pentagram
              'h'  hexagram
        color
              'k'  blacK
              'r'  Red
              'g'  Green
              'b'  Blue
              'm'  Magenta
              'c'  Cyan
              'w'  White 
    
    常用的修改属性有: 
     "linestyle", 
     "linewidth",
     "color",
     "marker",
     "markersize",
     "markeredgecolor",
     "markerfacecolor".
    

    直方图


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

    相关文章

      网友评论

          本文标题:Octave常用语法

          本文链接:https://www.haomeiwen.com/subject/yctwbttx.html