Octave入门基础

一。简单介绍

1.1 Octave是什么?

Octave是一款用于数值计算和画图的开源软件。和Matlab一样,Octave 尤其精于矩阵运算:求解联立方程组、计算矩阵特征值和特征向量等等。

1.2 Octave的适用对象

Octave和Matlab被project人员和科研人员广泛使用来进行各种工业和学术上的数值计算和仿真。

比如,NASA 使用它来开发飞行器的对接系统;Jaguar Racing使用它来可视化和分析从 F1 赛车传来的数 据;Sheffield大学用它来开发用于识别癌细胞的软件。

Octave这种软件让编写数值处理程序变得简单,并提供数据可视化的多种方式。

1.3 Octave的下载与安装

參照网上相关教程;

二,简单计算

2.1 Octave最简单的使用方式就是像使用一个计算器一样在命令提示符下输入对应的计算式。

Octave能识别通常的计算表达式。

比如,在终端输入

octave:##>2+2

并按回车键, 你将得到下面的结果ans=4

各种计算符号的优先级与常规的一致,比方括号有最大优先级,其次为乘方,其次为乘除运算,最后为加减运算

2.2 内建函数

Octave中有非常多内建函数。能够通过输入函数名和括号里的输入參数来调用函数,比如:

octave:##> exp(1)

ans=2.71813

又如还有一个更长的表达式:计算 1.2 sin(40◦ + ln(2.42)), 输入octave:##>1.2*sin(40*pi/180+log(2.4^2))

ans=0.76618

当中主要的数学函数有:sin, cos, tan, log, exp, abs, floor, ceil等。

假设你要退出Octave,仅仅须要在命令提示符下输入quit或者exit就可以。

三。Octave变量

3.1 变量

同C++。Java等变成语言一样我们能够定义变量,但Octave 为解释性语言。

因此Octave中变量的类型是不用声明的,但Octave中变量名是区分大小的,即变量a和变量A是不同的变量。

octave:##> deg=pi/180

deg=0.017453

假设你须要从当前的变量空间中删除某个变量,clear命令能移出全部的变量,或者移出某个特定变量, 如:

clear name
将移出名为 name 的某个变量。

3.2 加载和保存数据

当你退出Octave的时候,你将丢失你所创建的变量。假设你须要在工作的中途退出Octave,那么你能够保存当前会话的数据并在之后又一次加载它。假设你输入

octave:##> save anyname


这将整个工作空间上的变量存储到当前文件夹下一个名为anyname.mat 的文件里 (注意.mat是Octave自己主动加入的)。这样你能够退出Octave,之后又一次启动Octave程序,通过输入

octave:##> loadanyname

将又一次加载之前保存的命名空间,并从你中断的地方又一次開始工作。

相同的,你能够加载或者保存特定的变量。格式为

octave:##>save filename var1 var2 ...

比如,假设你想存储deg变量,那么你能够输入

octave:##> save degconv deg


这样将deg变量存储于名为degconv.mat的文件里,你能够通过下面命令又一次加载变量

octave:##> loaddegconv

Octave
相同能从文件里导入数据,这种功能在你使用其它的数据来源进行绘图或者计算的时候变得很实用。

比如:

X=load(‘featureX.txt’);

3.3 获得帮助

假设你不清楚某个命令或者函数的使用方法,可也用help命令来获得其具体的使用方法。

help commandname

比如:help plot

3.4 分号和隐藏结果

分号在通常的编程语言中被用来表示程序块或者单个语句的结束。在 Octave 中分号没必要的,但它也有一个特殊的功能。我们眼下的样例中,我们仅仅要输入一个 Octave 命令并不以分号结尾的话,Octave 总 会将语句运行的结果随即显示出来。

可是,假设我们在一行语句的末尾添上分号,Octave将不会显出对应的 结果。

四 数组和向量及矩阵

前面介绍过Octave的优势就是能够非常方便的进行矩阵的相关计算。

4.1 构造向量

构造矩阵或者向量的方法有非常多。当中最直接简单的方法就是在一个方括号 [] 中给出其元素,比如

octave:##> a=[1 4 5]

a=1 4 5

octave:##> b=[2,1,0]

b=2 1 0

octave:##> c=[4;7;10]

c=4

7

10

在方括号里由空格或者逗号隔开的一组数据被定义为行向量; 而由分号或者回车隔开的一组数据被定义为列向量。你能够通过已经定义的向量来定义新的向量,比如

octave:##> a=[1 4 5]

a=1 4 5

octave:##> d=[a 6]

d=1 4 5 6

4.2 冒号表达式

利用冒号可以很方便的创建一些特殊的向量

octave:##> e=2:6

e=2 3 4 5 6

冒号表达式的规则是告诉octave创建一个以第一个数字開始并以一递增至第二个数的向量。在第一和第 二个数之间能够插入第三个參数来声明向量中元素之间的递增量,形如 a : b : c。

4.3 向量构造函数

zeros(M,N) 创建一个MXN的全零矩阵

ones(M,N)  创建一个MXN的全一矩阵

linspace(x1,x2,N) 创建一个N个元素的向量。均匀分布于x1和下x2

eye(M) 创建一个MXM的单位矩阵

rand(M,N) 创建一个MXN的矩阵,元素为随机值

4.4 向量中的元素操作

向量中的元素通过括号(),而第一个元素的编号为1, 而不是像C或者 C++那样从0開始。比如

octave:##>a=[1:2:6 -1 0]

a=1 3 5 -1 0

我们能够通过下面命令訪问到该向量的第三个元素

octave:##> a(3)

ans=5

冒号的表示法相同能够用于声明向量中的元素的范围

octave:##>a(3:5)

ans=5 -1 0

octave:##>a(1:2:5)

ans= 1 5 0

4.5 向量的计算

将一组数据存入一个向量之后可以使用非常多的Octave函数来进行计算。

在C++中假设你想进行同样的计算,比如每一个元素乘以2, 你须要使用for循环来对每一个元素操作。

在Octave中尽管也可以使用for循环来实现,可是Octave本身由有简单的向量操作方式。

向量中每一个都乘以一个数能够通过对该向量乘以一个数来实现。

以之前定义的 a 向量为例:

octave:1> a=[1:2:6 -1 0]

a=
1 3 5 -1 0

octave:2> a*2

ans=2 6 10 -2 0

对向量中全部元素都除以一个数的操作与乘法类似。

使用+−算符,你相同能够对该向量中的每一个元素都加上或者减去一个数值。两个向量的相乘遵循矩阵的乘法法则,向量乘法并非相应元素的相乘。假设要进行相应元素的乘除法,你能够使用.* 以及./ 算符注意每一个算符前的‘.’表示为一个元素对元素的计算。比如:

octave:3> b=1:5

b= 1 2 3 4 5

octave:4> a.*b

ans=1 6 15 -4 0

逐个元素的乘方计算相同也非常实用。

该计算的算符为,比如

octave:5> b.^2

ans =1 4 9 16 25

octave:6> 2.^b

ans =2 4 8 16 32

octave:7> a.^b

ans =
1 9 125 1 0

仅仅要两个向量又同样的大小和形状,它们就能够进行元素之间的(element-by-element) 加减乘除和乘方运算。

4.6 函数操作向量

前面讲到过的函数也是能够适用于向量。

比如:exp, log,abs等

octave:##>abs([-1 2 -3])

ans=1 2 3

此外max, length,size, sum, mean, std, floor, ceil等函数或许要掌握,能够通过help命令获得具体使用方法。

4.7 矩阵的转置

一个向量的转置将其由行向量转为列向量或者由列向量转换为行向量。

矩阵的转置将其行和列交换。

在数学上,矩阵A的转置表示为AT 在octave中转置操作用上引號实现:

octave:6> A=[5 7 9;-1 3 -2]

A= 5  7  9

-1  3 - 2

octave:7> A'

ans =5   -1

7   3

9   -2

此外inv求矩阵的逆,det求矩阵的特征值。trace求矩阵的迹。

五 绘图

Octave通过调用还有一个开源软件 GNUPLOT来实现很丰富的绘图功能。最主要的绘图命令是 plot(x,y), 当中 x,y 分别为横轴和纵轴数据。

能够进行对应地颜色和样式的选择如:’ro’代表们红色圆圈,’b.’代表蓝色点点等;能够通过title,xlabel。ylabel加入标题以及x,y轴名称。legend命令为该图片加入对应的图例。

5.1 假设你想保存当前的图片内容并将新创建的图片层叠到原图片上,你能够通过使用 hold on命令来实现。使用该命令,我们能够实如今同一幅图上呈现由两个plot 命令绘制的线条。

octave:##> x=linspace(-10,10);

octave:##> plot(x,sin(x),’r-’);

octave:##> hold on

octave:##> plot(x,sin(x)./x,’b*’)

octave:##>title(‘Figure’)

octave:##>xlabel(‘X’)

octave:##>ylabel(‘Y’)

octave:##>legend(‘sin(x)’,’sin(x)/x’)

5.2 subplot(2,3,2)表示在一个格子中绘图。因此该条语句的意思是分成一个2X3的格子,并在第2个格子里绘图;当中子格的顺序为从左到右从上到下递增,即

1   2

3   4

5   6

比如:

octave:##> x=linspace(-10,10);

octave:##> subplot(2,1,1)

octave:##> plot(x,sin(x));

octave:##> subplot(2,1,2)

octave:##> plot(x,sin(x)./x)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3N0b3Bjb2Rlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

5.3 多幅图片能够用figure命令来实现.

5.4 绘制曲面

octave:##> x=2:0.2:4;

octave:##>y=1:0.2:3;

octave:##>[X,Y]=meshgrid(x,y);% make the grid

octave:##> Z=(X-3).^2-(Y-2).^2;

octave:##> subplot(2,2,1);surf(Z);title('surf')

octave:##> subplot(2,2,2);mesh(Z);title('mesh')

octave:##> subplot(2,2,3);meshz(Z);title('meshz')

octave:##> subplot(2,2,4);contour(Z);title('contour')

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3N0b3Bjb2Rlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

六 Octave脚本

假设你有一些反复输入的命令的,你能够将这一系列的命令存入一个Octave 脚本之中。这种包括 Octave 命令的文本文件是 Octave 程序的基本形式。当你在 Octave 中运行这种脚本的时候,其效果与将这些命令一行行输入 Octave 中的效果是一样的。

并且当你对一系列要输入 Octave 的命令不是非常拿的准的时候,在一个脚本中改动这些命令会比在 Octave 终端中又一次调出及改动命令要简单方便很多。

Octave的脚本是普通的文本文件,可是他们须要有一个.m 的后缀 (e.g.run.m)。因此,它们通常也被称为M文件。

除去后缀的文件名称部分是你在运行该命令时须要向 Octave 终端输入的部分。

你能够在不论什么的文本编辑器 (如,emacs, vi,notepad) 中创建并编辑一个脚本文件。

在Octave中能够通过下面命令

octave:##> edit

在新窗体中调出文本编辑器emacs。假设你想编辑一个已存在的脚本,你能够在edit命令后加上脚本的名字。比如,比方你有个名为 run.m的脚本,输入edit run 将调出编辑器并打开该文件供你编辑。

然后在 Octave中输入 run运行脚本:

octave:##> run

Octave将执行该脚本中的命令并得到对应的结果。

七 控制语句

到眼下为止我们所示程序或者表达式都是一些简单的顺序运行的操作。

向量和矩阵的使用可以让Octave运行更加高级的计算,可是要实现更加复杂的功能,我们还须要一些标准的程序语言。Octave提供了通常的循环和选择语句。其语法类似于我们熟知的C,C++,Java等编程语言。

在这里只举一个样例:

octave:##> x=1;

octave:##> while 1+x>1

x=x/2;

end

octave:##>x

x=

1.1102e-16

八 Octave函数

Octave中的脚本能实现一些简单的程序,可是比脚本更加强大的是用户自己定义函数。自己定义函数可以让你在命令行、其它函数中和脚本中调用。

在Octave函数中參数是通过值传递的而不是通过reference传递并能返回多个返回值。

Octave函数如同脚本一样,是写入一个纯文本文件里的,不同的是函数文件的第一行遵循例如以下的格式

function[output1,output2,...]=name(input1,input2,...)

每一个函数都卸载了不同的M文件里,并且该M文件名称不须与函数名一致。

比如名为sind()的函数必需被定义在名为sind.m的M文件里。每一个函数接受一定的參数输入并输出一定的数值。

当你须要反复性的运行一定表达式,这表明你须要将这与的操作封装为一个函数。封装为函数之后 Octave 将更加易用,添加了代码的可读性并能够供他人使用。

我们能够创建这么一个函数,创建一个名为 sind.m 的 文本文件并包括下面内容:

function s=sind(x)

% SIND(x)Calculates sine(x) in degrees

s=sin(x*pi/180);

end

然后就能够使用该函数了,比如:

octave:##> sind(0)

ans=0

octave:##> sind(45)

ans= 0.7071

octave:##> t=sind([30 60 90])

t= 0.50000.8660 1.0000

Octave入门基础的更多相关文章

  1. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  2. 01shell入门基础

    01shell入门基础 为什么学习和使用shell编程 shell是一种脚本语言,脚本语言是相对于编译语言而言的.脚本语言不需要编译,由解释器读取程序并且执行其中的语句,而编译语言需要编译成可执行代码 ...

  3. Markdown入门基础

    // Markdown入门基础 最近准备开始强迫自己写博文,以治疗严重的拖延症,再不治疗就“病入骨髓,司命之所属,无奈何”了啊.正所谓“工欲善其事,必先利其器”,于是乎在写博文前,博主特地研究了下博文 ...

  4. JavaScript入门基础

    JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...

  5. C++ STL编程轻松入门基础

    C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...

  6. HTML入门基础教程相关知识

    HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...

  7. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  8. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

  9. AngularJS入门基础PPT(附下载链接)

    学习了Angularjs有段时间,自己写了一个PPT,个人认为总结的非常全面,对于入门基础够了. 大致模块有:Angularjs简单介绍,Angularjs特性,hello world,Control ...

随机推荐

  1. CSS简单的四种引入方式

    CSS一共有四种引入方式 (1)最简单的两种方式是直接在html标签里面引入,或者在html文件前面声明,以下是简单的代码示例 <!DOCTYPE html> <html lang= ...

  2. idea热部署设置(复制)

    提出问题 IntelliJ IDEA工具如何设置热部署??? 解决问题 我的IDEA的版本是:IntelliJ IDEA 14.0.2 第一步:打开tomcat配置 这里写图片描述 第二步: 这里写图 ...

  3. struts ValueStack 详解

    一.ValueStack     1.ValueStack是一个接口,在struts2中使用OGNL(Object-Graph Navigation Language)表达式实际上是使用        ...

  4. 安装配置apache sentry服务

    环境 系统环境:Centos6.7 Hadoop版本:CDH5.10 jdk版本:jdk7 注:本文并未集成kerberos组件 安装Sentry Server 选择安装hive的节点进行安装测试: ...

  5. mysql数据库无法插入中文字符

    分析原因:这是因为之前修改了数据库的编码,但数据表的编码却没有跟着改变导致的. 安装mysql 时,使用的是latin编码(随后修改为utf8).建的数据表是在latin编码下建立的.而jsp页面使用 ...

  6. java 后台封装json数据学习总结(二)

    一.JSONArray的应用 从json数组中得到相应java数组,如果要获取java数组中的元素,只需要遍历该数组. /* * 从json数组中得到相应java数组 * JSONArray下的toA ...

  7. docker (centOS 7) 使用笔记3 - docker swarm mode

    1. 什么是docker swarm mode docker engine自带的 容器管理 工具.功能比较早的 docker swarm 更多,且集成在docker engine里. (docker ...

  8. modulus CRT

    (吐槽)额..CRT本来就是modulus的么.. CRT是可以每次加一个条件的(当然要保证coprime) 那么我们考虑 x=a (mod p1) x=b (mod p2) 这样的话我们知道 x=a ...

  9. python常用内建函数

    1.input 读取控制台的输入,输出的是字符串 2.enumerate 遍历数组的时候,能够将index 和item同时返回,返回的每一项包含index,item 3.isinstance(obje ...

  10. Secure services with TLS ---Docker配置https

    官方文档:https://docs.docker.com/ee/ucp/interlock/usage/tls/