GNU Octave
| 開発元 | John W. Eaton |
|---|---|
| 初版 | 1988年[1] |
| 最新版 | 3.4.0(2011年2月8日) |
| プログラミング言語 | C++ |
| 対応OS | クロスプラットフォーム |
| 種別 | 数値解析ソフトウェア |
| ライセンス | GNU General Public License |
| 公式サイト | www.gnu.org/software/octave/ |
Gnu Octave とは、MATLABと互換性を持ったフリーな数値解析ソフトウェアであり、GNUで開発している。
目次 |
[編集] 開発の経緯
開発が始まったのは1988年ごろである。当初は化学反応器設計の授業で使うために作られたが、その後1992年から、ジョン・イートン (John W. Eaton) が開発を始めた。彼による最初のアルファ版のリリースは1993年1月4日で、正式版 (ver. 1.0) は翌年、1994年2月17日にリリースされた。2007年12月21日にはバージョン3.0がリリースされている。
Octaveという名前は、イートンの指導教官であり、裏紙にでも軽く書いてやるような概算の計算 (back-of-the-envelope calculation) が速かった元オレゴン州立大学教授のオクターブ・レヴェンシュピール (Octave Levenspiel、化学反応論) に因んでいる[2]。
当初の目的である個人的な計算機としての利用に加え、Octave は学術的及び工業的な用途にも使われている。例えば米国ピッツバーグ・スーパーコンピューティング・センター (Pittsburgh supercomputing center) では大規模並列計算による社会保障番号の攻撃に対する脆弱性検証に、Octave を使っている[3]。
[編集] 特徴
[編集] 計算機言語としての Octave
Octave を操作するための命令系統は、計算機言語でもある。Octave はC言語のような構造化言語であり、C言語の標準ライブラリに含まれる多くの関数が Octave でも実装されている。またUNIXのシステムコールもいくつか利用できる[4]。しかし関数呼び出しの際の、引き数値の参照渡しはサポートされていない [5]。
Octave 言語で書かれたプログラムは、関数呼び出しの並びで構成されるスクリプトである。その文法は行列計算が基本であり、スクリプトにおいては行列計算の演算子が多数利用できる。オブジェクト指向言語ではないが、多種多様なデータ構造を利用できる。
Octave の文法は MATLAB のものと非常によく似ており、少し注意してプログラミングすることで Octave と MATLAB の両方で実行できるスクリプトを書くことができる[6]。
Octave は GNU General Public License によって公開されているため、その改変、複製、利用は自由である[2]。Octave は多くの Unix や Unix 互換のプラットフォーム、Mac OS X、Microsoft Windows で実行できる[7]。
[編集] 関数名、変数名の補完
対話的に実行中の 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'[8]を実装しており、それによる例外処理を記述することができる。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にまとめられている[9]が、以下のようなものがある。
- 行頭に % の他に # を置いても、その行をコメントとすることができる
- ++, --, +=, *=, /= などのC言語の演算子が使える
- [1:10](3) などのように、変数 (インスタンス) を生成しなくても、配列の要素を参照できる
- ' の他に、" を使っても文字列を定義できる
[編集] 脚注
- ^ “Frequently asked questions about Octave (with answers)” (英語). 2011年2月14日閲覧。
- ^ a b Eaton, John W. “About Octave”. 2009年6月28日閲覧。
- ^ Social Security Number Vulnerability Findings Relied on Supercomputing HPCwire, July 8, 2009.
- ^ “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 のサイトでの解説 (英語)
- ^ 互換性に関するFAQ
[編集] 参考文献
- Hansen, Jesper (June 2011). GNU Octave Beginner's Guide. Packt Publishing.
[編集] 外部リンク
一部を除いて、全て英語のサイトである。
- Octave.org Home Page
- オンライン・マニュアル (旧版の日本語訳)
- コミュニティによる開発サイト Octave-forge
- Octave wiki (ブラウザによってはリダイレクトがタイムアウトを生じるので,2回クリックするとよい)
- Online access to Octave オンラインでOctaveによる計算を試せる。
- Octave - AIMSWiki
- QtOctave un Front-End para Octave - インターフェイスをグライフィカルに拡張したQtOctaveを開発している。
- MATLAB Central MATLAB のユーザーコミュニティのサイト。多くの科学技術計算スクリプトが投稿され、ユーザーにより評価されている。MATLAB の別売り Toolbox を使わないスクリプトは、GNU Octave でそのまま利用できるものも多い。
- Octave Programming Tutorial WikiBooks プロジェクト内のドキュメント集。
|
|||||||||||||||||||