GNU Octave
GNU Octave は、主に数値解析を目的としたプログラミング言語である。コマンドラインインタフェースを提供し、MATLABとほぼ互換性のある数値実験用プログラミング言語として使用できる。 Octaveは、GNUプロジェクトの一つでGNU General Public Licenseの条件の下の自由ソフトウェアである。GNU OctaveとScilabは、MATLABのオープンソース代替品の一つである。OctaveはScilabよりもMATLABとの互換性維持に重点を置いている[3][4][5][6][7][8]。 開発の経緯開発が始まったのは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という名前はイートンの指導教官である元オレゴン州立大学教授のオクターブ・レヴェンシュピール(Octave Levenspiel、反応工学)にちなむ[9]。 当初の目的である個人的な利用に加え、学術及び工業的用途にも使われている。例えば米国ピッツバーグ・スーパーコンピューティング・センター (Pittsburgh supercomputing center) では大規模並列計算による社会保障番号の攻撃に対する脆弱性検証に使っている[10]。 ユーザインタフェースは永らくCUIのみであったが、3.8.0からはGUIが搭載された[11]。 特徴
対話形式Octaveは対話形式で各種コマンドを入力する事で数値計算する。入力途中にタブを入力すると関数名、変数名、ファイル名等を補完する機能(Bashのタブ補完 (en) と同様の)がある。また、それまでに入力されたコマンドラインが保存されており、必要に応じて修正し再実行できるヒストリ機能もある。 プログラミング言語対話形式で用いられるコマンドをスクリプト化しプログラミング言語のように扱う事ができる。C言語のような構造化言語であり、C言語の標準ライブラリに含まれる多くの関数が実装されている。またUNIXのシステムコールもいくつか利用できる[12]。しかし関数呼び出しで引き数の参照渡しはサポートされていない[13]。 スクリプトでは多数の行列演算子が利用できる。また多種多様なデータ構造を利用できる他、3.2以降のバージョンではオブジェクト指向が付加された。 Octaveの文法はMATLABと非常によく似ており、少し注意してプログラミングすることでOctaveとMATLABの両方で実行できるスクリプトを書くことができる[14]。 OctaveはGNU General Public Licenseによって公開されているため、その改変、複製、利用は自由である[9]。Octaveは多くのUNIXやUnix系プラットフォーム、macOS、Windows で実行できる[15]。 データ構造ユーザーがデータ構造をある程度定義できる。たとえばスカラー、行列、文字列の異なる型を持つひとつの構造体を以下のようにして定義できる: 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 } 条件判定条件判定の二項演算子、' インクリメントおよびデクリメント演算子C言語と同様の ' 例外処理LISPの ' unwind_protect
body
unwind_protect_cleanup
cleanup
end_unwind_protect
Octaveでは一般的に、ブロックの終端は ' unwind_protectのcleanup部は、常に実行される。body部で例外が発生した場合は、その時点でcleanupが実行され、 ' MATLAB との互換性のため他の例外処理も使える: try
body
catch
exception_handling
end
' 引数関数の引数の個数は上限を指定することなく可変にできる。引数が0個以上であることを指定するには、以下の通り function s = plus (varargin)
if (nargin==0)
s = 0;
else
s = varargin{1} + plus (varargin{2:nargin});
end
end
返り値
function varargout = multiassign (data)
for k=1:nargout
varargout{k} = data(:,k);
end
end
C++との統合C++プログラムからOctave の関数を呼ぶことができる。以下の例では、 #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プログラムは修正なしでOctaveで動作する。以下が両者の類似点である:
両者の相異点はオフィシャルサイトのFAQにまとめられている[17]が、例として以下のようなものがある:
関連項目
脚注
参考文献
外部リンク一部を除いて、全て英語のサイトである。
Information related to GNU Octave |