介绍 GNU Octave script

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
thorne
帖子: 660
注册时间: 2008-10-08 22:01
送出感谢: 0
接收感谢: 2 次

介绍 GNU Octave script

#1

帖子 thorne » 2010-01-26 14:52

Gnu Octave是一款与matlab类似的数值计算工具。本文根据我自己的使用经验简单介绍一下如何使用GNU Octave的脚本。
首先说明GNU Octave脚本的功能。Gnu octave脚本就是能够写出一个脚本文件并告诉shell通过调用ocave代码解释器来解释代码。使用的一个例子:
比如我们有一个存有数据的文本文件,我们需要以此文本文件作为shell下命令的一个输入参数,完成基于此文件内部数据的数值处理。假设数据文件为 inputdata.dat,我们通过执行一个脚本 (比如名为processdata)

代码: 全选

./processdata inputdata.dat
就完成了我们想要做的工作。
让我们一步步的来。

Step0:准备工作
安装了octave就可以了,很简单。

Step1. 让octave作为解释器
我们知道bash脚本的第一句是

代码: 全选

#!/usr/bash
其目的是要让我们在执行该脚本的时候告诉系统让bash座位解释脚本内语句的解释器。
由此类比,GNU Octave的脚本的关键就是在脚本的第一句用

代码: 全选

#! /usr/bin/octave-3.0.1 -qf
来告诉内核脚本内的语句的解释器为octave。
一个例子:

1.首先编辑文件:
$ vim testoctave:

代码: 全选

#! /usr/bin/octave-3.0.1 -qf
 printf ("%s\n", program_name ());
 arg_list = argv ();
 for i = 1:nargin
printf (" %s\n", arg_list{i});
endfor
printf ("\n");  

这个简单的脚本实现了打印程序的名称(printf ("%s\n", program_name ());)以及打印输入的变量( arg_list = argv ();
for i = 1:nargin
printf (" %s\n", arg_list{i});
endfor)
正如上面部分所说:其中的第一行 #! /usr/bin/octave-3.0.1 -qf 是告诉shelll用octave为解释器。
有matlab或者octave基础的同学都可以看出脚本内部除去第一句较为特殊外,其余的都为普通的octave命令。

2.为testoctave加入可执行权限

代码: 全选

   chmod u+x testoctave

3. 在bash下执行之

代码: 全选

./testocave inputfile1 inputfile2 inputfile3
那么根据程序设置应该是如下的输出:
2. testoctave
3. inputfile1
4. inputfile2
5. inputfile3

Step2:进阶
我们再看看以下的例子:

代码: 全选

#! /usr/bin/octave-3.0.1 -qf
       printf ("%s\n", program_name ());
       arg_list=argv ();
       for i=1:nargin
         data1=load(arg_list{i});
        figure;
        plot(data1(:,1),data1(:,2));
        print -deps data.eps;
        endfor 
上面的脚本中更加的有实用性,它通过读入数据,并绘制了图形。
虽然只是简单的实现了脚本对数据的读入和画图,但是只要data1变量能够接受到输入文件中的数据,那么我们可以以此做任何我们想要实现的数值处理。
我在终端下面这样输入命令:
step1: chmod u+x readdata; #加入可执行权限
step2: ./readdata inputfile
ok,功能实现,很高兴看到目录里出现了该数据的图像

代码: 全选

总结一下 其实关键点就在:
   1. #! /usr/bin/octave-3.0.1 -qf
   2. arg_list=argv ();
   3. data1=load(arg_list{i});
我使用这个功能是因为我需要用数值处理的脚本处理我的rsot软件产生的大量的数据文件(一些很多很大的矩阵),有了这样的脚本我就能够实现对数值的批量处理,希望对大家有所帮助。

===================新修改==============
那个

代码: 全选

#! /usr/bin/octave-3.0.1 -qf
中的 -qf选项不是必须的
octave -q时是让其启动时不显示一些介绍性的信息
-f选项最好不要用 使用该选项则不会读取 .octaverc等文件的设置
其实简单一点的话用

代码: 全选

#! /usr/bin/octave
就好了
ps: #!据说叫魔法字符串什么的
上次由 thorne 在 2011-01-13 13:14,总共编辑 1 次。

代码: 全选

其实我是个Debian GNU/Linux用户
Octave script :http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=254511
Octave中文:http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=318969
头像
cheng0529
帖子: 72
注册时间: 2008-04-23 14:38
送出感谢: 0
接收感谢: 0

Re: 介绍 GNU Octave script

#2

帖子 cheng0529 » 2010-01-26 17:53

恩,启发很多,thx
132811
帖子: 194
注册时间: 2010-04-20 21:19
系统: ArchLinux
来自: My gtalk:a132811@
送出感谢: 3 次
接收感谢: 1 次
联系:

Re: 介绍 GNU Octave script

#3

帖子 132811 » 2010-07-05 3:48

mark!
发现octave中的没有simulink.
看GNU文档提到,可以用scicraft代替,可是我发现scicraft官网上的DEB包怎么也下不了,怎么回事呀?
楼主有什么建议吗?还有什么可以代替simulink的呢?
http://hilojack.sinaapp.com
i3 M370(2.4G)/500G/8G/OpenGL:Gallium 0.4 on nvidia 3100M
头像
123rps
帖子: 189
注册时间: 2009-04-30 16:17
送出感谢: 0
接收感谢: 1 次

Re: 介绍 GNU Octave script

#4

帖子 123rps » 2010-07-05 9:54

不错不错,收藏了
thx lz
东西大街南北走
出门碰到人咬狗
搬起狗来砸砖头
却被砖头咬了手
OpenOffice.org Math公式编辑器完全教程
thorne
帖子: 660
注册时间: 2008-10-08 22:01
送出感谢: 0
接收感谢: 2 次

Re: 介绍 GNU Octave script

#5

帖子 thorne » 2010-07-05 18:56

132811 写了:mark!
发现octave中的没有simulink.
看GNU文档提到,可以用scicraft代替,可是我发现scicraft官网上的DEB包怎么也下不了,怎么回事呀?
楼主有什么建议吗?还有什么可以代替simulink的呢?

我没有使用过这个功能 对simulink也没有需求
不知道解决办法
scilab好像有相关的功能

代码: 全选

其实我是个Debian GNU/Linux用户
Octave script :http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=254511
Octave中文:http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=318969
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40
送出感谢: 1 次
接收感谢: 0
联系:

Re: 介绍 GNU Octave script

#6

帖子 peakgg » 2010-07-05 19:31

132811 写了:mark!
发现octave中的没有simulink.
看GNU文档提到,可以用scicraft代替,可是我发现scicraft官网上的DEB包怎么也下不了,怎么回事呀?
楼主有什么建议吗?还有什么可以代替simulink的呢?
我去看了一下,发现那个项目好像死掉了。不过我找到了基于scilab的scicos。装了,发现可以用。
头像
pocoyo
论坛版主
帖子: 25877
注册时间: 2008-03-25 15:49
来自: 谁知道?
送出感谢: 5 次
接收感谢: 9 次
联系:

Re: 介绍 GNU Octave script

#7

帖子 pocoyo » 2010-07-05 19:45

很强.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 介绍 GNU Octave script

#8

帖子 eexpress » 2010-07-05 19:56

一直不知道这是干什么的。
召唤统计雕。
● 鸣学
头像
peakgg
帖子: 1122
注册时间: 2006-10-10 9:40
送出感谢: 1 次
接收感谢: 0
联系:

Re: 介绍 GNU Octave script

#9

帖子 peakgg » 2010-07-05 20:04

神竟然不知道octave是干什么的。。。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 介绍 GNU Octave script

#10

帖子 eexpress » 2010-07-05 20:34

我就会gnuplot
其他的数据的事情,那是下级干的。
:em04
● 鸣学
enthumelon
帖子: 86
注册时间: 2006-11-29 10:18
来自: USTC
送出感谢: 0
接收感谢: 0
联系:

Re: 介绍 GNU Octave script

#11

帖子 enthumelon » 2010-07-06 10:15

补充个hints:
R也可以做到,Python(这个貌似要用Python(x,y))也可以做到。
R的做法是:
1. 安装R: r-base
2. 写脚本,叫做 run.R :
mat<-read.table('~/code/data.txt',sep='\t');#读入tab文件
mat2<-read.csv('~/code/data.csv');#直接读入csv文件
pdf('~/code/pic_1.pdf');
plot(apply(mat,1,max),apply(mat,1,min),main='max vs min');#mat每行最大和mat1每行最小的plot图
dev.off();
3. 执行
只用
Rscript run.R
就好了。要写SH脚本什么的当然差不多一样。
thorne
帖子: 660
注册时间: 2008-10-08 22:01
送出感谢: 0
接收感谢: 2 次

Re: 介绍 GNU Octave script

#12

帖子 thorne » 2010-07-06 11:51

喜欢的是 GNU octave的script 可以和shell script一起用
将octave script 加入到 PATH中
比如有 data1 data2 ...... data100
一个for循环加octave script就可以了

另外,我很看好python的numpy
python的script也不错 三方的裤 numpy什么的

代码: 全选

#!/usr/bin/ python
...........
python codes
................

代码: 全选

其实我是个Debian GNU/Linux用户
Octave script :http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=254511
Octave中文:http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=318969
nic
帖子: 10
注册时间: 2010-07-22 8:21
送出感谢: 0
接收感谢: 0

Re: 介绍 GNU Octave script

#13

帖子 nic » 2010-07-26 12:49

LZ好牛逼 :em04
初学ubuntu ,多多交流
lo.yu.linux
帖子: 29
注册时间: 2010-08-03 13:44
送出感谢: 0
接收感谢: 0

Re: 介绍 GNU Octave script

#14

帖子 lo.yu.linux » 2010-08-19 12:33

好东西,收藏下。
等有时间上官网下载去! :em11
thorne
帖子: 660
注册时间: 2008-10-08 22:01
送出感谢: 0
接收感谢: 2 次

Re: 介绍 GNU Octave script

#15

帖子 thorne » 2010-08-19 19:37

lo.yu.linux 写了:好东西,收藏下。
等有时间上官网下载去! :em11
用软件包管理器安装
何必自己去下载?

代码: 全选

其实我是个Debian GNU/Linux用户
Octave script :http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=254511
Octave中文:http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=318969
回复

回到 “办公、图像、机械电子设计等”