前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开始使用Octave

开始使用Octave

作者头像
mwangblog
发布2018-07-04 14:50:56
2K0
发布2018-07-04 14:50:56
举报
文章被收录于专栏:mwangblogmwangblog

开始使用Octave

Octave是一个开源的科学计算以及数值分析的工具,在一定程度上,它与MATLAB语法兼容。

那位要问了:为什么不直接用MATLAB呢?因为MATLAB贵啊!

数值计算

计算数值很简单,只需要输入需要的表达式就可以了:

代码语言:javascript
复制
>> 5 + 5
ans =  10
>> 5 / 2
ans =  2.5000

或者调用一些函数:

代码语言:javascript
复制
>> 2^2
ans =  4
>> sqrt (4)
ans =  2

敲入变量名即可查看变量的值。首先创建两个变量:

代码语言:javascript
复制
>> v = 1 + 3;
>> x = v * 2;

在语句后面加上;可以不把表达式的值立刻显示出来,我们知道v值为4且x值为8。下面分别查看它们的值:

代码语言:javascript
复制
>> v
v =  4
>> x
x =  8

也可以使用disp命令:

代码语言:javascript
复制
>> disp (v)
 4
>> disp (sprintf ('The value of v is %.2f', v) )
The value of v is 4.00

查看工作区域中所有的变量,可以使用who或者whos命令,其中whos显示的信息更加详细一些:

代码语言:javascript
复制
>> who
Variables in the current scope:

ans  v    x

>> whos
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        ans         1x1                          8  double
        v           1x1                          8  double
        x           1x1                          8  double

Total is 3 elements using 24 bytes

删除变量可以使用clear命令,%表示注释:

代码语言:javascript
复制
>> clear x  % 删除 x
>> clear    % 删除所有变量

使用format修改小数点后位数:

代码语言:javascript
复制
>> format short
>> pi
ans =  3.1416
>> format long
>> pi
ans =  3.14159265358979u

逻辑运算

逻辑运算与C语言很相似:

代码语言:javascript
复制
>> 1 == 2   % 比较是否相等
ans = 0     % 假
>> 1 ~= 2   % 比较是否不相等,这里符号与C语言不太一样
ans =  1    % 真
>> 0 && 1   % 与
ans = 0
>> 0 || 1   % 或
ans =  1

创建向量与矩阵

创建一个向量:

代码语言:javascript
复制
>> v = [1 2 3]
v =

   1   2   3

创建一个矩阵:

代码语言:javascript
复制
>> A = [1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

创建特殊的矩阵:

代码语言:javascript
复制
>> B = ones (2, 3)  % 创建元素值为1,维度为2 x 3的矩阵
B =

   1   1   1
   1   1   1

>> zeros (2,3)      % 创建元素值为0,维度为2 x 3的矩阵
ans =

   0   0   0
   0   0   0

>> rand (2,3)       % 创建元素值为随机数,维度为2 x 3的矩阵
ans =

   0.667607   0.340230   0.020027
   0.713828   0.791409   0.713673

可以创建单位阵:

代码语言:javascript
复制
>> eye (3)
ans =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

查看矩阵的维度:

代码语言:javascript
复制
>> A
A =

   1   2
   3   4
   5   6

>> size (A)
ans =

   3   2

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

size()函数返回矩阵的维度,1维度显示矩阵的行数,2维度显示矩阵的列数。

length()函数会返回向量的长度,或者矩阵的最大维度:

代码语言:javascript
复制
>> v
v =

   1   2   3

>> length (v)   % 返回向量的元素数量
ans =  3
>> B
B =

   1   1   1
   1   1   1

>> length (B)   % 由于矩阵B的是2 x 3矩阵,所以返回大值 3
ans =  3

矩阵中数据的操作

查看A矩阵中第2行第2列的数值:

代码语言:javascript
复制
>> A (2,2)
ans =  4

获取矩阵A的某行或者某列:

代码语言:javascript
复制
>> A
A =

   1   2
   3   4
   5   6

>> A (:,2)      % 获取A的第2列
ans =

   2
   4
   6

>> A (3,:)      % 获取A的第3行
ans =

   5   6

>> A ([1,3],:)  % 获取A的第1,3行
ans =

   1   2
   5   6

将A中所有元素组成一个向量:

代码语言:javascript
复制
>> A (:)
ans =

   1
   3
   5
   2
   4
   6

合并矩阵:

代码语言:javascript
复制
>> A
A =

   1   2
   3   4
   5   6

>> C = ones (2,2);
>> A = [A ; C]              % 将C合并到A的下方,并且将结果赋值给A
A =

   1   2
   3   4
   5   6
   1   1
   1   1

>> A = [A, [1; 2; 3; 4; 5]] % 将[1;2;3;4;5]合并到A的右边,将结果赋值给A
A =

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

求向量中的最大值:

代码语言:javascript
复制
>> v = [5, 4, 3];
>> max (v)
ans =  5
>> [val, ind] = max (v)
val =  5
ind =  1

求矩阵的最大值:

代码语言:javascript
复制
>> A = [ 1 3 5 7 9; 2 4 6 8 10]
A =

    1    3    5    7    9
    2    4    6    8   10

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

    2    4    6    8   10

>> max (A, [], 1)   % 在第1维求A的最大值
ans =

    2    4    6    8   10

>> max (A, [], 2)   % 在第2维求A的最大值
ans =

    9
   10

向量中的值与某一个数值的比较:

代码语言:javascript
复制
>> v
v =

   5   4   3

>> v > 3            % 将v中的每一个元素同3比较
ans =

   1   1   0

>> find (v > 3)     % 得到符合条件的元素的下标
ans =

   1   2

求向量或者矩阵元素之和:

代码语言:javascript
复制
>> v
v =

   5   4   3

>> sum (v)      % 求出向量中元素的和
ans =  12
>> A
A =

    1    3    5    7    9
    2    4    6    8   10

>> sum (A,1)    % 求出A中第1维之和
ans =

    3    7   11   15   19

>> sum (A,2)    % 求出A中第2维之和
ans =

   25
   30

矩阵计算

求矩阵的转置与逆:

代码语言:javascript
复制
A =

   1   2
   3   4

>> A'           % 求A的转置
ans =

   1   3
   2   4

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

  -2.00000   1.00000
   1.50000  -0.50000

矩阵与数字计算:

代码语言:javascript
复制
>> A
A =

   1   2
   3   4

>> A + 2    % A中每个元素+2
ans =

   3   4
   5   6

>> A * 2    % A中每个元素*2
ans =

   2   4
   6   8

>> A / 2    % A中每个元素/2
ans =

   0.50000   1.00000
   1.50000   2.00000

矩阵与矩阵计算:

代码语言:javascript
复制
>> A
A =

   1   2
   3   4

>> B = [5 6; 7 8]
B =

   5   6
   7   8

>> A + B        % 矩阵加法
ans =

    6    8
   10   12

>> A .* B       % A中的元素与B中对应的元素相乘
ans =

    5   12
   21   32

>> A * B        % 矩阵乘法
ans =

   19   22
   43   50

控制结构

while循环和if条件:

代码语言:javascript
复制
>> v
v =

    1    2    3    4    5    6    7    8    9   10

>> while true,              % start loop
        v(i) = v(i) + 1;
        if v(i) > 4,        % 如果v中的元素>4,则退出循环
                break;
        end;
        i = i + 1;          % 下标自增1
   end;                     % end loop
>> v
v =

    2    3    4    5    5    6    7    8    9   10

上面的程序中使用了whileif。注意在循环或者判断结构的结尾写明end;

for循环:

代码语言:javascript
复制
>> for i = [1 3 5],
        v (i) = 0;
   end;
>> v
v =

    0    3    0    5    0    6    7    8    9   10

switch判断:

代码语言:javascript
复制
>> a = 2
a =  2
>> switch (a),
        case 1,
                disp ('The value is 1.');
        case 2,
                disp ('The value is 2.');
        case 3,
                disp ('The value is 3.');
        otherwise,
                disp ('Wo...');
   end;
The value is 2.

switch中并不需要写break来划分情况。

函数

新建一个名为addOne.m的文件,写入:

代码语言:javascript
复制
function y = addOne (x)
y = x + 1

这表示一个函数,这个函数的参数为x,返回值为y,函数的内容是y = x + 1

调用它:

代码语言:javascript
复制
>> addOne(1.2)
y =  2.2000
ans =  2.2000

画图

使用plot()函数画图:

代码语言:javascript
复制
>> x = 0:0.1:2*pi;                      % 为x赋值
>> y_sin = sin (x);                     % 为y赋值
>> plot (x, y_sin);                     % 绘制x与y的图像
>> xlabel ('x');                        % x轴的标签设置为"x"
>> ylabel ('sin(x)');                   % y轴的标签设置为"sin(x)"
>> title ('y = sin (x), 0 < x < 2pi');  % 设置图片标题
>> print -dpng 'octave_plot_sin.png'    % 保存为png图片,并设置文件名
>> close                                % 关闭图片

图像如下:

可以使用hold on命令在一幅图中绘制多条曲线:

代码语言:javascript
复制
>> x = 0:0.1:2*pi;
>> y_sin = sin (x);
>> y_cos = cos (x);
>> plot (x, y_sin);
>> hold on;                         % 接下来还在此图中绘制
>> plot (x, y_cos, 'r');            % 红色线条绘制y_cos
>> xlabel ('x');
>> ylabel ('y');
>> legend ('y=sin(x)','y=cos(x)');  % 设置图例
>> print -dpng "octave_plot_sin_cos.png";
>> close

图像如下:

使用subplot对图像进行分格:

代码语言:javascript
复制
>> x = 0:0.1:2*pi;
>> y_sin = sin (x);
>> y_cos = cos (x);
>> y = 0.5 * x;
>> subplot (1,2,1);     % 将图像分为1行2列,使用第1个格
>> plot (x, y, 'b');
>> xlabel ('x'); ylabel ('y=x/2');
>> subplot (2,2,2);     % 将图像分为2行2列,使用第2个格
>> plot (x, y_sin, 'r');
>> xlabel ('x'); ylabel ('y=sin(x)');
>> subplot (2,2,4);     % 将图像分为2行2列,使用第4个格
>> plot (x, y_cos, 'g');
>> xlabel ('x'); ylabel ('y=cos(x)');
>> print -dpng "octave_subplot_3.png";
>> close

图像如下:

文件操作

导入一个文件非常简单:

代码语言:javascript
复制
>> load ('featureX.dat')    % 导入featureX.dat文件

保存一个文件也很简单:

代码语言:javascript
复制
>> save I.mat I;                % 保存I到I.mat 会对数据进行压缩
>> save hello.txt I --ascii;    % 保存为可读文本文档

获取帮助

查看函数eye()的帮助文档:

代码语言:javascript
复制
>> help eye
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始使用Octave
    • 逻辑运算
      • 创建向量与矩阵
        • 矩阵中数据的操作
          • 矩阵计算
            • 控制结构
              • 函数
                • 画图
                  • 文件操作
                    • 获取帮助
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档