美文网首页
Octave基础语法

Octave基础语法

作者: Yuanshuo | 来源:发表于2019-12-19 21:21 被阅读0次
    The core values of Chinese socialism

    数学运算

    加、减、乘、除、指数运算

    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^6
    ans =  64
    

    逻辑运算

    octave:6> 1 == 2  % false
    ans = 0
    octave:7> 1 ~= 2
    ans =  1
    octave:8> 1 && 0  % AND
    ans = 0
    octave:9> 1 || 0  % OR
    ans =  1
    octave:10> xor(1,0)
    ans =  1
    

    值得说明的是,其中%代表注释符号,~=代表不等于,xor()是异或符号。

    修改等待命令的快捷提示

    octave:11> PS1(">> ")
    >> 
    >> 
    >>
    

    赋值运算

    >> a = 3
    a =  3
    >>
    
    

    如果不希望在屏幕上显示结果,只需要结尾加;即可抑制打印输出。

    >> a = 3;  % semicolon supressing output
    >>
    

    变量的打印输出

    >> b = "hi";
    >> b
    b = hi
    >> c = (3>=1);
    >> c
    c =  1
    >>
    

    对于一些复杂的输出,可以使用disp命令:

    >> a = pi;
    >> a
    a =  3.1416
    >> disp(a)
     3.1416
    >> disp(sprintf('2 decimals: %0.2f', a))
    2 decimals: 3.14
    >>
    

    控制输出长短:

    >> a
    a =  3.1416
    >> format long
    >> a
    a =  3.14159265358979
    >> format short
    >> a
    a =  3.1416
    >>
    

    矩阵的表示

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

    另外一种表示矩阵的方式:

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

    分配一个一行三列的行向量:

    >> v = [1 2 3]
    v =
    
       1   2   3
    

    分配一个三行一列的列向量:

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

    表示一个行向量,其中第一个值是起始值,中间的值是步长,最后一个值是终止值:

    >> v = 1:0.1:2
    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.000
    

    也可以不写步长,这样默认步长是1:

    >> v = 1:6
    v =
    
       1   2   3   4   5   6
    

    生成元素为1的矩阵

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

    生成一个2行3列,所有元素都为2的矩阵:

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

    生成0矩阵

    >> w = zeros(1,3)
    w =
    
       0   0   0
    

    生成随机数矩阵

    >> w = rand(1,3)
    w =
    
       0.65555   0.77468   0.85729
    

    -6加上根号10乘以一个一行10000列的正太分布的随机向量。

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

    绘制函数

    绘制这个直方图:

    >> hist(w)
    

    绘制有50条的直方图:

    >>hist(w,50)
    

    生成单位矩阵

    生成矩阵的特殊命令:eye可用来生成单位矩阵:

    >> A = eye(5)
    A =
    
    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
    

    查看矩阵尺寸

    通过size命令,我们能看到这个矩阵的尺寸:

    >> A = [1 2; 3 4; 5 6]
    A =
    
       1   2
       3   4
       5   6
    >> size(A)
    ans =
    
       3   2
    
    

    实际上size的这个输出结果自身也是一个矩阵:

    >> sz = size(A)
    sz =
    
       3   2
    
    >> size(sz)
    ans =
    
       1   2
    

    分别查看A向量的size的输出结果中的两个值:

    >> size(A,1)
    ans =  3
    >> size(A,2)
    ans =  2
    

    查看矩阵最大维度

    length指令,来获取矩阵的最大维度,这个命令其实通常只对向量使用:

    >> v = [1 2 3 4]
    v =
    
       1   2   3   4
    
    >> length(v)
    ans =  4
    >> A
    A =
    
       1   2
       3   4
       5   6
    
    >> length(A)
    ans =  3
    

    加载外部文件

    通过load命令,加载外部文件:

    >> load featuresX.dat
    >> load priceY.dat
    

    查看存储变量

    以使用who命令来查看当前Octave中存储的变量:

    >> who
    Variables in the current scope:
    
    A          ans        c          priceY     v
    a          b          featuresX  sz         w
    

    whos命令可以查看更详细的信息,包括尺寸,内存占用,以及类型:

    >> whos
    Variables in the current scope:
    
       Attr Name           Size                     Bytes  Class
       ==== ====           ====                     =====  ===== 
            A              3x2                         48  double
            a              1x1                          8  double
            ans            1x2                         16  double
            b              1x2                          2  char
            c              1x1                          1  logical
            featuresX     47x2                        752  double
            priceY        47x1                        376  double
            sz             1x2                         16  double
            v              1x4                         32  double
            w              1x10000                  80000  double
    
    Total is 10159 elements using 81251 bytes
    

    可以看到featuresX和priceY已经被成功的被作为一个变量加载进来了,我们可以直接输入featuresX来查看这个变量的内容:

    >> featuresX
    
    featuresX =
    
       2104      3
       1600      3
       2400      3
       1416      2
       3000      4
       1985      4
       1534      3
       1427      3
       1380      3
       1494      3
       1940      4
       2000      3
       1890      3
        ...
    

    通过size()函数,我们可以看到featuresX是一个47行2列的矩阵,priceY是一个47行1列的矩阵:

    >> size(featuresX)
    ans =
    
       47    2
    
    >> size(priceY)
    ans =
    
       47    1
    

    删除变量

    使用clear命令来删除某个变量

    截取矩阵部分元素

    将priceY的前10个元素存入变量V:

    >> V = priceY(1:10)
    V =
    
       3999
       3299
       3690
       2320
       5399
       2999
       3149
       1989
       2120
       2425
    

    变量的存储

    将变量V存入hello.mat文件中:

    >> save hello.mat V
    >> ls
    FeaturesX.dat   PriceY.dat  hello.mat
    

    这里其实是把V按照压缩的二进制的形式进行存储,如果说V的数据很大,那么压缩的幅度也很大。

    如果想按照一个我们可以看得懂的格式进行存储的话,可以这样输入:save hello.txt V -ascii

    清空所有变量

    直接输入clear命令,会清空所有的变量:

    >> clear
    >> whos
    

    索引

    用索引来查询

    用索引来查询

    首先创建矩阵A:

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

    你可以通过A(3,2)来访问矩阵的第三行第二列的元素:

    >> A(3,2)
    ans =  6
    

    你也可以通过A(2,:)来访问第二行的所有元素,其中:代表该行/列的所有元素:

    >> A(2,:)
    ans =
    
       3   4
    

    你可以通过A([1 3], :)来取矩阵第1行以及第3行的所有元素:

    >> A([1 3], :)
    ans =
    
       1   2
       5   6
    

    通过A(:)来将所有的元素以一个列向量的形式展示:

    >> A(:)
    ans =
    
         1
         3
         5
        10
        11
        12
    

    用索引来赋值

    你也可以通过索引来进行复制操作:

    >> A
    A =
    
       1   2
       3   4
       5   6
    
    >> A(:,2) = [10; 11; 12]
    A =
    
        1   10
        3   11
        5   12
    

    在矩阵的右侧新增一列:

    >> A
    A =
    
        1   10
        3   11
        5   12
    
    >> A = [A,[100; 101; 102]]
    A =
    
         1    10   100
         3    11   101
         5    12   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
    

    将两个列数相等的向量按照从上到下的顺序连在一起:

    >> A
    A =
    
       1   2
       3   4
       5   6
    
    >> B
    B =
    
       11   12
       13   14
       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
    
    >> C = [1 1; 2 2]
    C =
    
       1   1
       2   2
    
    >> A*C
    ans =
    
        5    5
       11   11
       17   17
    

    点乘操作

    矩阵每个对应元素相乘。

    >> 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
       
    >> A.*B
    ans =
    
       11   24
       39   56
       75   96
    

    对每个元素求平方

    >> A .^ 2
    ans =
    
        1    4
        9   16
       25   36
    

    对每个元素求倒数

    >> v = [1; 2; 3]
    v =
    
       1
       2
       3
    
    >> 1 ./ v
    ans =
    
       1.00000
       0.50000
       0.33333
    

    对每个元素求对数

    >> log(v)
    ans =
    
       0.00000
       0.69315
       1.09861
    

    自然数e的幂次运算

    以e为底,以每个元素为幂的运算:

    >> exp(v)
    ans =
    
        2.7183
        7.3891
       20.0855
    
    

    对每个元素求绝对值

    >> abs([-1; 2; -3])
    ans =
    
       1
       2
       3
    

    求相反数运算

    >> -v
    ans =
    
      -1
      -2
      -3
    

    对向量每个元素自增1

    >> v + 1
    ans =
    
       2
       3
       4
    

    矩阵的转置

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

    获取向量中最大的元素

    >> a = [1 15 2 0.5]
    a =
    
        1.00000   15.00000    2.00000    0.50000
    
    >> val = max(a)
    val =  15
    

    也可以获取最大元素的索引:

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

    值得注意的是,如果这里不是向量,而是矩阵,那么将得到每一列的最大值

    >> D = [1 5;2 4; 3 3]
    D =
    
       1   5
       2   4
       3   3
    
    >> max(D)
    ans =
    
       3   5
    

    判断矩阵中每个元素是否满足某条件

    >> a
    a =
    
        1.00000   15.00000    2.00000    0.50000
    
    >> a < 3
    ans =
    
       1   0   1   1
    

    获取魔幻方针

    >> A = magic(3)
    A =
    
       8   1   6
       3   5   7
       4   9   2
    
    

    找出矩阵中满足某条件元素的索引

    >> A
    A =
    
       8   1   6
       3   5   7
       4   9   2
    
    >> [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
    

    求积函数

    >> a
    a =
    
        1.00000   15.00000    2.00000    0.50000
    
    >> prod(a)
    ans =  15
    

    四舍五入

    >> a
    a =
    
        1.00000   15.00000    2.00000    0.50000
    
    >> floor(a)
    ans =
    
        1   15    2    0
    >> ceil(a)
    ans =
    
        1   15    2    1
    

    max函数

    获得一个3×3的方阵,元素为在0到1之间的随机数:

    >> rand(3)
    ans =
    
       0.315556   0.669565   0.192329
       0.449421   0.010167   0.389329
       0.282657   0.761167   0.600949
    

    分别取两个矩阵中对应位置较大的一个元素,组成新矩阵:

    >> max(rand(3),rand(3))
    ans =
    
       0.53967   0.79306   0.62026
       0.90069   0.70636   0.55156
       0.98940   0.68021   0.85094
    

    获取一个矩阵中每一列最大的元素组成的向量:

    >> A
    A =
    
       8   1   6
       3   5   7
       4   9   2
    
    >> max(A,[],1)
    ans =
    
       8   9   7
    

    获取矩阵每一行的最大值:

    >> max(A,[],2)
    ans =
    
       8
       7
       9
    

    找出矩阵A中最大元素的两种方法:

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

    对矩阵的每一行(列)求和

    >> A = magic(9)
    A =
    
       47   58   69   80    1   12   23   34   45
       57   68   79    9   11   22   33   44   46
       67   78    8   10   21   32   43   54   56
       77    7   18   20   31   42   53   55   66
        6   17   19   30   41   52   63   65   76
       16   27   29   40   51   62   64   75    5
       26   28   39   50   61   72   74    4   15
       36   38   49   60   71   73    3   14   25
       37   48   59   70   81    2   13   24   35
    
    >> sum(A,1)
    ans =
    
       369   369   369   369   369   369   369   369   369
       
    >> sum(A,2)
    ans =
    
       369
       369
       369
       369
       369
       369
       369
       369
       369
    

    求A的对角线元素的和:

    >> A
    A =
    
       47   58   69   80    1   12   23   34   45
       57   68   79    9   11   22   33   44   46
       67   78    8   10   21   32   43   54   56
       77    7   18   20   31   42   53   55   66
        6   17   19   30   41   52   63   65   76
       16   27   29   40   51   62   64   75    5
       26   28   39   50   61   72   74    4   15
       36   38   49   60   71   73    3   14   25
       37   48   59   70   81    2   13   24   35
    
    >> eye(9)
    ans =
    
    Diagonal Matrix
    
       1   0   0   0   0   0   0   0   0
       0   1   0   0   0   0   0   0   0
       0   0   1   0   0   0   0   0   0
       0   0   0   1   0   0   0   0   0
       0   0   0   0   1   0   0   0   0
       0   0   0   0   0   1   0   0   0
       0   0   0   0   0   0   1   0   0
       0   0   0   0   0   0   0   1   0
       0   0   0   0   0   0   0   0   1
    
    >> A.*eye(9)
    ans =
    
       47    0    0    0    0    0    0    0    0
        0   68    0    0    0    0    0    0    0
        0    0    8    0    0    0    0    0    0
        0    0    0   20    0    0    0    0    0
        0    0    0    0   41    0    0    0    0
        0    0    0    0    0   62    0    0    0
        0    0    0    0    0    0   74    0    0
        0    0    0    0    0    0    0   14    0
        0    0    0    0    0    0    0    0   35
        
    >> sum(sum(A.*eye(9)))
    ans =  369
    

    将矩阵上下翻转

    >> magic(3)
    ans =
    
       8   1   6
       3   5   7
       4   9   2
       
    >> flipud(magic(3))
    ans =
    
       4   9   2
       3   5   7
       8   1   6
    

    求逆矩阵

    >> A = magic(3)
    A =
    
       8   1   6
       3   5   7
       4   9   2
    
    >> temp = pinv(A)
    temp =
    
       0.147222  -0.144444   0.063889
      -0.061111   0.022222   0.105556
      -0.019444   0.188889  -0.102778
    
    >> temp * 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]; % 生成一个0到0.98的等差数列,差值为0.01
    >> y1 = sin(8*pi*t)
    >> plot(t,y1);
    

    同理绘制余弦图:

    >> y2 = cos(8*pi*t);
    >> plot(t,y2)
    

    图的标记

    
    

    图片的保存与删除

    
    

    为图像标记

    
    

    使用subplot将图像分割显示

    
    

    矩阵的可视化

    
    

    for语句的使用

    
    

    while的使用

    
    

    if以及break的使用

    
    

    else的使用

    
    

    退出Octave

    
    

    函数

    
    

    使用函数求解代价函数值

    
    

    向量化

    
    

    相关文章

      网友评论

          本文标题:Octave基础语法

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