美文网首页
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基础语法

    数学运算 加、减、乘、除、指数运算 逻辑运算 值得说明的是,其中%代表注释符号,~=代表不等于,xor()是异或符...

  • 2020-02-17

    一。Octave1.安装octave 2.生成图表功能 折线图折线图实列.png二。基础语法1.基本算术运算:加,...

  • Octave Tutorial

    0. 概述 机器学习 - Octave/Matlab Tutorial 课程,Octave 常用语法记录。 1. ...

  • 5. Octave Tutorial(现在一般都用python做

    Octave Tutorial Octave 语法几乎和Matelab一样 一般的数学计算(elementary ...

  • 【机器学习】-Week2 6.Octave/Matlab Res

    Octave/MATLAB resources Octave Resources At the Octave co...

  • Octave 基础命令

    通过PS1('>>')可更改指令的前导符,将''中的内容变为前导符,如下文将>>更为前导符 load xxx.da...

  • Octave常用语法

    大体内容是转的,但是绘图部分做了补充和修改。 向量 分号:分割行 空格或逗号:分割列 创建与访问 行向量 空格或逗...

  • Machine Learning 学习笔记-Octave基础介绍

    Octave的安装 Octave 3.8.0下载地址windows Mac OS X Octave代码 1==2 ...

  • 【Android】知识点汇总,坚持原创ing

    Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础...

  • java

    语法基础1.1 java初体验(语法基础)1.2 变量和常量(语法基础)1.2 变量和常量(语法基础)1.4 流程...

网友评论

      本文标题:Octave基础语法

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