GNU Octave
Linux上で動かしたGNU Octave 4.0.0 RC1 | |
開発元 | John W. Eaton |
---|---|
初版 | 1988年 (1988)[1] |
最新版 | 4.4.1 / 2018年8月9日 (2018-08-09)[2] |
リポジトリ | hg.savannah.gnu.org/hgweb/octave |
プログラミング言語 | C++ |
対応OS | クロスプラットフォーム |
種別 | 数値解析ソフトウェア |
ライセンス | GNU General Public License |
公式サイト | www.gnu.org/software/octave/ |
GNU Octave は、主に数値解析を目的とした高レベルプログラミング言語である。Octaveは線形ならびに非線形問題を数値的に解くためのコマンドライン·インタフェースを提供する。また、
MATLABとほぼ互換性のある、数値実験を行うためのプログラミング言語として使用することができる。 Octaveは、GNUプロジェクトの一つでGNU General Public Licenseの条件の下のフリーソフトウェアである。
GNU OctaveとScilabは、MATLABのオープンソース代替品の一つである。
ただし、Octaveは、ScilabよりもMATLABとの互換性維持に重点を置いている[3][4][5][6][7][8]。
目次
1 開発の経緯
2 特徴
2.1 計算機言語としての Octave
2.2 関数名、変数名の補完
2.3 ヒストリ機能
2.4 データ構造
2.5 条件判定のショートカット
2.6 インクリメントおよびデクリメント演算子
2.7 Unwind-protect
2.8 個数が可変の引数
2.9 個数が可変の返り値
2.10 C++との統合
3 MATLAB との互換性
4 関連項目
5 脚注
6 参考文献
7 外部リンク
開発の経緯
開発が始まったのは1988年ごろである。当初は化学反応器設計の授業で使うために作られたが、その後1992年から、ジョン・イートン (John W. Eaton) が開発を始めた。彼による最初のアルファ版のリリースは1993年1月4日で、正式版 (ver. 1.0) は翌年、1994年2月17日にリリースされた。2007年12月21日にバージョン3.0が、2015年5月29日にはバージョン4.0がリリースされた。
Octaveという名前は、イートンの指導教官であり、裏紙にでも軽く書いてやるような概算の計算 (back-of-the-envelope calculation) が速かった元オレゴン州立大学教授のオクターブ・レヴェンシュピール(Octave Levenspiel、反応工学)にちなむ[9]。
当初の目的である個人的な計算機としての利用に加え、Octaveは学術的及び工業的な用途にも使われている。例えば米国ピッツバーグ・スーパーコンピューティング・センター (Pittsburgh supercomputing center) では大規模並列計算による社会保障番号の攻撃に対する脆弱性検証に、Octaveを使っている[10]。
ユーザインタフェースは永らくCUIのみであったが、3.8.0からはGUIが搭載された[11]。
特徴
- MATLAB 互換のプログラミング言語のインタプリタを実装しており、またGUIの開発環境がそろっている。
C++とSTLを用いている。- Mex-fileならびにOct-fileとよばれる仕組みを用いて、C/C++言語で記述された自作関数によりOctaveを拡張可能である。
- Octave 4.0からグラフィックはgnuplot からOpenGL graphics with Qt widgetsへ変更された。
- Octaveは行列計算でBLASを呼び出しているため高速かつ信頼性が高い。
- Octave 4.0からOpenMPがデフォルトで有効になっており、システムにOpenMPが実装されている場合、計算の高速化が期待できる。
計算機言語としての Octave
Octaveを操作するための命令系統は、計算機言語でもある。OctaveはC言語のような構造化言語であり、C言語の標準ライブラリに含まれる多くの関数がOctaveでも実装されている。またUNIXのシステムコールもいくつか利用できる[12]。しかし関数呼び出しの際の、引き数値の参照渡しはサポートされていない
[13]。
Octave言語で書かれたプログラムは、関数呼び出しの並びで構成されるスクリプトである。その文法は行列計算が基本であり、スクリプトにおいては行列計算の演算子が多数利用できる。多種多様なデータ構造を利用できる他,3.2以降のバージョンでは,オブジェクト指向プログラミング機能が付加された。
Octaveの文法はMATLABのものと非常によく似ており、少し注意してプログラミングすることでOctaveとMATLABの両方で実行できるスクリプトを書くことができる[14]。
OctaveはGNU General Public Licenseによって公開されているため、その改変、複製、利用は自由である[9]。Octaveは多くの UNIXやUnix系のプラットフォーム、macOS、Windows で実行できる[15]。
関数名、変数名の補完
対話的に実行中のOctaveのコマンドラインでタブを入力すると、関数名、変数名、ファイル名の入力を補完する(Bashのタブ補完 (en) と同様の機能)。その時点でカーソルの直前に入力されているテキストを補完する。
ヒストリ機能
対話的に実行中のOctaveでは、それまでに入力されたコマンドラインが保存されており、必要に応じて修正して再実行できる。
データ構造
Octaveではユーザーがデータ構造をある程度定義できる。たとえばスカラー、行列、文字列の変数を持つ構造体を以下のようにして定義できる。
octave:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "string";
octave:2> x.a
ans = 1
octave:3> x.b
ans =
1 2
3 4
octave:4> x.c
ans = string
octave:5> x
x =
{
a = 1
b =
1 2
3 4
c = string
}
条件判定のショートカット
Octaveで条件判定に使われる論理演算の二項演算子、'&&
' および '||
' が評価されるときには、短絡評価が行われる(C言語の場合と同様)。一方、条件判定に '&
' および '|
' 演算子を使った場合は短絡評価は行われない。
インクリメントおよびデクリメント演算子
OctaveにはC言語と同様の '++
' および '--
' 演算子があり、やはりC言語と同様に変数の前及び後ろに置くことができる。変数値の増減後に代入を行う '+=
' および '-=
' 演算子もある。
Unwind-protect
OctaveではLISPの 'unwind_protect
'[16]を実装しており、それによる例外処理を記述することができる。unwind_protectブロックはOctaveでは以下のように書かれる。
unwind_protect
body
unwind_protect_cleanup
cleanup
end_unwind_protect
Octaveでは一般的に、ブロックの終端は 'end
' キーワードで示される(MATLAB と互換である)が、'end_block
' でも示すことができる。'unwind_protect
' ブロックでも 'end
' に加えて 'end_unwind_protect
' を使うことができる。
unwind_protectのcleanup部は、常に実行される。body部で例外が発生した場合は、その時点でcleanupが実行され、 'unwind_protect
' ブロックの残りの部分が評価されることはない。
Octaveでは他の例外処理も使える(MATLAB との互換性を持たせるため)。
try
body
catch
exception_handling
end
この 'try
' と 'catch
' を使う例では 'unwind_protect
' ブロックと違い、例外がbody部で発生したときにのみexception_handlingが実行される。またexception_handlingの実行後は、 'rethrow( lasterror )
' 文がexception_handling部に記述されていない限りは、'try
' ブロックの例外発生場所以降の部分が評価されることはない。
個数が可変の引数
Octaveでは関数の引数について、その個数の上限を指定することなく可変としておくことができる。引数が0個以上であることを指定するには、varargin
を引数として指定する。varargin
は、引数リストの最後に置くか、または唯一の引数として指定する。
function s = plus (varargin)
if (nargin==0)
s = 0;
else
s = varargin{1} + plus (varargin{2:nargin});
end
end
個数が可変の返り値
Octaveの関数は、varargout
を使うことで返り値の数が実行時に決まるように記述できる。
function varargout = multiassign (data)
for k=1:nargout
varargout{k} = data(:,k);
end
end
C++との統合
C++ソースプログラムの中から直接、Octave の関数を呼ぶことができる。以下の例では、rand([10,1])
というOctaveの関数呼び出しをC++のプログラムの中から行っている。
#include <octave/oct.h>
...
ColumnVector NumRands(2);
NumRands(0) = 10;
NumRands(1) = 1;
octave_value_list f_arg, f_ret;
f_arg(0) = octave_value(NumRands);
f_ret = feval("rand",f_arg,1);
Matrix unis(f_ret(0).matrix_value());
MATLAB との互換性
Octaveは、MATLABとの互換性を主に目指しており、MATLABの機能の多くをOctaveも持っている。またMATLABのために書かれたプログラムも修正せずに動作するものが多い。
- 行列を基本のデータ形式にしている
- 複素数に対応
- 強力なbuild-in関数と、ライブラリを持つ
- ユーザ定義関数によって拡張可能
MATLABとOctaveの相異点については、オフィシャル・サイトのFAQにまとめられている[17]が、以下のようなものがある。
- 行頭に % の他に # を置いても、その行をコメントとすることができる
- ++, --, +=, *=, /= などのC言語の演算子が使える
- [1:10](3) などのように、変数 (インスタンス) を生成しなくても、配列の要素を参照できる
- ' の他に、" を使っても文字列を定義できる
関連項目
- 数学に関する記事の一覧
- 数値解析ソフトウェア
- 類似のソフトウェア
- FreeMat
- MATLAB
- Scilab
脚注
^ “Frequently asked questions about Octave (with answers)” (英語). 2011年2月14日閲覧。
^ “GNU Octave”. 2018-011-11閲覧。
^ Trappenberg, Thomas (2010). Fundamentals of Computational Neuroscience. Oxford University Press. p. 361. ISBN 978-0-19-956841-3.
^ Muhammad, A; Zalizniak, V (2011). Practical Scientific Computing. Woodhead Publishing. p. 3. ISBN 978-0-85709-226-7.
^ Megrey, Bernard A.; Moksness, Erlend (2008). Computers in Fisheries Research. Springer Science & Business Media. p. 345. ISBN 978-1-4020-8636-6.
^ Kapuno, Raul Raymond (2008). Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers. p. 365. ISBN 978-1-934015-09-4.
^ Herman, Russell L. (2013). A Course in Mathematical Methods for Physicists. CRC Press. p. 42. ISBN 978-1-4665-8467-9.
^ Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014). Simulation of ODE/PDE Models with MATLAB®, OCTAVE and SCILAB: Scientific and Engineering Applications. Springer. pp. 114–115. ISBN 978-3-319-06790-2.
- ^ abEaton, John W. “About Octave”. 2009年6月28日閲覧。
^ Social Security Number Vulnerability Findings Relied on Supercomputing HPCwire, July 8, 2009.
^ 末岡洋子 (2014年1月6日). “「GNU Octave 3.8.0」リリース、ついにGUIを搭載”. SourceForge.JP Magazine. http://sourceforge.jp/magazine/14/01/06/152000 2014年2月10日閲覧。
^ “GNU Octave - Controlling subprocesses” (2008年11月14日). 2009年1月28日閲覧。
^ “GNU Octave”. 2009年1月28日閲覧。
^ “FAQ: MATLAB compatibility”. 2009年7月4日閲覧。
^ “FAQ: Getting Octave”. 2009年7月4日閲覧。
^ CLHS: Special Operator UNWIND-PROTECT Common Lisp Hyper Specのサイトでの解説(英語)
^ How is Octave different from Matlab? 互換性に関するFAQ
参考文献
- Hansen, Jesper (June 2011). GNU Octave Beginner's Guide. Packt Publishing.
外部リンク
一部を除いて、全て英語のサイトである。
- Octave.org Home Page
オンライン・マニュアル(英語) (旧版2.1.xの日本語訳)- コミュニティによる開発サイト Octave-forge
Octave wiki (ブラウザによってはリダイレクトがタイムアウトを生じるので,2回クリックするとよい)
Online access to Octave オンラインでOctaveによる計算を試せる。- Octave - AIMSWiki
QtOctave un Front-End para Octave[リンク切れ] - インターフェイスをグライフィカルに拡張したQtOctaveを開発している。
DomainMath IDE - GUIフロントエンドを開発している。オープンソース。
MATLAB Central MATLABのユーザーコミュニティのサイト。多くの科学技術計算スクリプトが投稿され、ユーザーにより評価されている。MATLABの別売りToolboxを使わないスクリプトは、GNU Octaveでそのまま利用できるものも多い。
Octave Programming Tutorial WikiBooks プロジェクト内のドキュメント集。
|
|
|