GNU Octave
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/02/15 21:43 UTC 版)
|
Gnu-octave のロゴ
|
|
|
Linux上で動かしたGNU Octave 4.0.0 RC1の画面。
|
|
| 開発元 | John W. Eaton |
|---|---|
| 初版 | 1988年[1] |
| 最新版 |
9.4.0 / 2025年2月7日[2]
|
| リポジトリ | |
| プログラミング 言語 |
C++ |
| 対応OS | クロスプラットフォーム - macOS, Linux, BSD |
| 対応言語 | 日本語対応。 |
| 種別 | 数値解析ソフトウェア |
| ライセンス | GNU General Public License |
| 公式サイト | www.gnu.org/software/octave/ |
GNU Octave(グニューオクターブ)は、数値計算を主目的とする高水準プログラミング言語および数値計算環境である。コマンドラインインタフェースおよびGUIを備え、MATLABと大部分が互換な言語として利用できる。GNUプロジェクトの一つで、GNU General Public License(GPL) の下で配布される自由ソフトウェアである[3][4][5][6][7][8]。
開発の経緯
Octaveの開発は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]。
特徴
- MATLAB 互換のインタプリタを実装しており、GUIの開発環境もそろっている。
- C++とSTLを用いる。
- C/C++言語の自作プログラムをコンパイルし、Oct-fileとよばれる形式で呼び出せる。
- Octave 4.0からグラフィックはOpenGL graphics with Qt widgetsを用いる。それ以前はgnuplot。
- 行列計算でBLASを呼び出しているため高速かつ信頼性が高い。
- Octave 4.0からOpenMPがデフォルトで有効になっており、システムにこれが実装されている場合、計算の高速化が期待できる。
対話形式
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言語の場合と同様)。 '&' および '|' 演算子を使った場合は短絡評価は行われない。
インクリメントおよびデクリメント演算子
C言語と同様の '++' および '--' 演算子があり、変数の前及び後ろに置くことができる。変数値の増減後に代入を行う '+=' および '-=' 演算子もある。
例外処理
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' ブロックの残りの部分が評価されることはない。
MATLAB との互換性のため他の例外処理も使える:
try
body
catch
exception_handling
end
'try' と 'catch' を使う例では 'unwind_protect' ブロックと違い、例外がbody部で発生したときにのみexception_handlingが実行される。またexception_handlingの実行後は、 'rethrow( lasterror )' 文がexception_handling部に記述されていない限りは、'try' ブロックの例外発生場所以降の部分が評価されることはない。
引数
関数の引数の個数は上限を指定することなく可変にできる。引数が0個以上であることを指定するには、以下の通りvararginを引数として指定する:
function s = plus (varargin)
if (nargin==0)
s = 0;
else
s = varargin{1} + plus (varargin{2:nargin});
end
end
返り値
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上でも動作する。
両者の主な共通点は以下の通りである:
- 行列を基本なデータ形式として扱う
- 複素数に対応している
- 強力な組み込み関数とライブラリを備える
- ユーザ定義関数によって機能を拡張できる
両者の相違点は公式サイトのFAQにまとめられており[17]、一例として以下のような特徴がある:
- % のほか # もコメントとして扱われる
- ++、--、+=、*=、/= などのC言語風の演算子が使用できる
- [1:10](3) のように、一時的な配列に対して直接要素を参照できる
- ' のほか " を用いて文字列を定義できる
関連項目
- 数値解析ソフトウェア
- 類似のソフトウェア
脚注
- ^ “Frequently asked questions about Octave (with answers)” (英語). 2011年2月14日閲覧。
- ^ “GNU Octave 9.4.0 Released”. 2025年2月15日閲覧。
- ^ 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
- ^ a b Eaton, 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 2014年2月10日閲覧。
{{cite news}}: CS1メンテナンス: 先頭の0を省略したymd形式の日付 (カテゴリ) - ^ “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
- オンライン・マニュアル(英語) - ウェイバックマシン(2006年5月31日アーカイブ分) (旧版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 プロジェクト内のドキュメント集。
固有名詞の分類
| オープンソース |
KMPlayer KMines GNU Octave Pure Data Conary |
| フリーソフトウェア |
フリーソフトウェア運動 KMines GNU Octave Pure Data Netscapeシリーズ |
| プログラミング言語 |
CASL Dylan GNU Octave マクロ言語 Pure Data |
| GNUプロジェクト |
GPLリンク例外 GNU Lesser General Public License GNU Octave Coreutils GNU General Public License |
| 数値解析ソフトウェア |
EISPACK LAPACK GNU Octave Basic Linear Algebra Subprograms MATLAB |
- GNU_Octaveのページへのリンク