Octave入门基础

时间 2014-10-26 16:14:26  CSDN博客
原文  http://blog.csdn.net/cstopcoder/article/details/40477431
主题 向量

一,简介

1.1 Octave是什么?

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

1.2 Octave的适用对象

Octave和Matlab被工程人员和科研人员广泛使用来进行各种工业和学术上的数值计算和仿真。例如,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)

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')

六 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. Python培训入门基础知识学什么?

    Python培训基础知识主要是针对一些零基础的同学安排的,虽说Python是相对比较简单的一门编程语言,但是没有基础的同学还是要进行系统的学习,那么Python培训入门基础知识学什么呢?来看看下面小编 ...

  2. JSON入门基础知识

    2019独角兽企业重金招聘Python工程师标准>>> JSON入门基础 1.JSON定义 JSON:JavaScript 对象表示法(JavaScript Object Notat ...

  3. JSP WEB开发入门基础到高手进阶教程002

    JSP WEB开发入门基础到高手进阶教程 -------开发入门 JSP与微软的Active Server Pages 兼容,但它是使用类似HTML的卷标以及Java程序代码段而不是VBScript. ...

  4. NLP汉语自然语言处理入门基础知识介绍

    NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部 ...

  5. 负荷计算的时候assert失败_负荷计算的入门基础知识,小白入门必备!

    负荷计算是电气设计人员必须掌握的一必修课,选导体.设备还有保护开关的选择,电网系统分析,都离不开负荷计算的内容,为此小编特意总结9个负荷计算的入门基础知识,分享给大家,希望能在工作和学习中作为一份参考 ...

  6. 7.1 pdo 宝塔面板php_小白入门基础傻瓜式操作PHP面板安装使用_Bt宝塔面板

    ​ 小白入门基础傻瓜式操作PHP面板安装使用--Bt宝塔面板 从购买服务器到安装面板在到搭建网站(最基础的教程,以后会延伸到部署项目) 不用写代码谁都可以做到搭建自己的网站(PHP类)还有小程序,只要 ...

  7. python编程语法大全-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货 每天 ...

  8. python编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  9. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

最新文章

  1. websocket连接mqtt实现发布及订阅主题
  2. codeforces 650D. Zip-line 线段树
  3. 架构编译器框架系统 LLVM 使用简介
  4. JAVA API1.7中文手册
  5. Eclipse基本使用
  6. 使用 dotnet 命令行配合 vscode 完成一个完整 .NET 解决方案的编写和调试
  7. cmk聪明客机器人餐厅_住了10年的老房大改造,45客餐厅全开放,更有整面大衣柜,高级又实用!...
  8. “干活的干不过写PPT 的”:新东方年会神曲刷屏背后:这3点值得我们思考
  9. java 设置系统参数_Java设置系统参数和运行参数
  10. Python自动化运维之21、CSS
  11. 双击ctrl搜索 意在颠覆用户的习惯
  12. Excel如何制作斜线表头
  13. java tuscany_Apache Tuscany Java 1.1发布
  14. QT 科学计算器与谷歌拼音输入法实现
  15. 删除文件显示正在使用无法删除该怎么办?
  16. 计算机如何去除桌面名称阴影,去除桌面图标阴影 - 桌面图标有蓝色阴影怎么去掉 - 安全专题...
  17. 《游测攻坚日记》-- 黑盒测试1
  18. 系统运维-20-2-openssh和openssl
  19. linux扩充文件夹容量,Linux扩充磁盘空间 【附查看磁盘命令】
  20. 长春哪个学校可以学习计算机编程的,长春编程学习,长春学编程的学校,长春学编程自学好还是报班好 - IT教育频道...

热门文章

  1. python百度贴吧发帖签到_python 爬虫 百度贴吧签到小工具
  2. 2017.10.22 最多的方案 失败总结
  3. 【人生杂谈】宇宙/暗物质/擎天柱
  4. 怎么删除已经安装的mysql_怎么样删除已经安装的mysql | wdlinux致力于Linux服务器架构,性能优化.免费CDN加速系统,免费智能DNS解析,负载均衡,集群分流...
  5. mosquitto支持websocket的使用方法
  6. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现1
  7. mysql 设置 0、1 用什么数据类型_MySQL数据库教程-数据表字段约束
  8. JDBC是什么?和JDBC程序的基本编写
  9. python文件分块读取_Python多进程分块读取超大文件的方法
  10. 纯前端开发案例:用 SpreadJS 搭建信息系统软件开发平台