GNU オクターブ

GNU オクターブ
開発者ジョン・W・イートン他多数[ 1 ]
初回リリース1993年1月4日(最初のアルファリリース)1994年2月17日(バージョン1.0)[ 2 ] (1993年1月4日 (1994年2月17日
安定版リリース
10.3.0 [ 3 ] ウィキデータで編集する / 2025年9月23日 (2025年9月23日
リポジトリ
書かれたC++(メイン)、Octave自体(スクリプト)、C(ラッパーコード)、Fortran(線形代数ラッパーコード)[ 4 ]
オペレーティング·システムWindowsmacOSLinuxBSD
入手可能な18言語[ 5 ]
タイプ科学計算
ライセンス2007: GPL-3.0以降[ a ] 1992: GPL-2.0以降[ b ]
Webサイトhttps://octave.org/

GNU Octaveは、科学計算および数値計算のための科学プログラミング言語です。Octaveは、 MATLABとほぼ互換性のある言語を使用して、線形および非線形問題の数値解法やその他の数値実験の実行に役立ちます。また、バッチ指向言語としても使用できます。GNUプロジェクトの一部として、 GNU一般公衆利用許諾契約書の条件に基づくフリーソフトウェアです。

歴史

このプロジェクトは1988年頃に構想されました。[ 6 ]当初は化学反応器設計コースの補助教材として開発されました。本格的な開発は1992年にジョン・W・イートンによって開始されました。最初のアルファリリースは1993年1月4日に遡り、1994年2月17日にバージョン1.0がリリースされました。バージョン9.2.0は2024年6月7日にリリースされました。[ 7 ]

このプログラムは、主著者の元教授であったオクターヴ・レーベンシュピールにちなんで名付けられました。レーベンシュピールは、簡略化された計算を素早く実行する能力で知られていました。[ 8 ]

開発の歴史

時間アクション
1988/1989第1回ディスカッション(書籍とソフトウェア)
1992年2月開発の開始
1993年1月ウェブニュース(バージョン0.60)
1994年2月第1版(バージョン1.0.0から1.1.1)[ 9 ]
1996年12月第2版​​(バージョン2.0.x)Windows移植版(Cygwin[ 10 ]
2007年12月バージョン3.0(マイルストーン)の公開[ 11 ]
2015年5月29日バージョン4.0.0(安定したGUIとOOPの新しい構文)[ 12 ] [ 13 ] [ 14 ] [ 15 ]
2019年3月1日Octave 5.1.0(QT5推奨、Qt 4.8以上)、hiDpiサポートの公開[ 16 ]
2020年11月26日Octave 6.1.0の公開(QT5が推奨、Qt 4.xは7で削除されたため非推奨)[ 17 ]
2022年4月6日Octave 7.1.0(QT5推奨)、グラフィックスバックエンドの改善、MATLABとの互換性の向上[ 18 ]
2023年3月7日Octave 8.1.0の公開、グラフィックスバックエンドの改善、MATLABとの互換性[ 19 ]
2024年3月14日Octave 9.1.0の公開、全般、MATLAB互換性、グラフィックスの改善。[ 20 ]
2024年6月7日Octave 9.2.0の公開、バグとGUIの修正。[ 21 ]

開発

Octaveは、個人用の科学計算用デスクトップコンピュータでの使用に加えて、学術界や産業界でも利用されています。例えば、Octaveはピッツバーグ・スーパーコンピューティング・センターの大規模並列コンピュータで、社会保障番号の推測に関連する脆弱性を発見するために使用されました。[ 22 ]

GPUを使用すればOpenCLCUDAによる高速化も可能となる。[ 23 ]

技術的な詳細

オクターブ、言語

Octave言語はインタープリタ型プログラミング言語です。C言語に似た構造化プログラミング言語であり多く一般的なC標準ライブラリ関数に加え、特定のUNIXシステムコールと関数をサポートしています。[ 24 ]ただし、関数の引数は不要な重複を避けるためにコピーオンライト方式ですが、引数の参照渡しはサポートしていません。 [ 25 ]

Octaveプログラムは、関数呼び出しのリストまたはスクリプトで構成されます。構文は行列ベースで、行列演算のための様々な関数を提供します。様々なデータ構造をサポートし、オブジェクト指向プログラミングを可能にします。[ 26 ]

その構文はMATLABと非常に似ており、スクリプトを注意深くプログラミングすることでOctaveとMATLABの両方で実行できるようになります。[ 27 ]

OctaveはGNU一般公衆利用許諾書に基づいて提供されるため、自由に変更、複製、使用することができます。[ 8 ]このプログラムは、 Microsoft WindowsおよびLinuxAndroidmacOSを含むほとんどのUnixおよびUnix系オペレーティングシステムで動作します。[ 28 ] [ 29 ] [ 30 ]

注目すべき機能

コマンドと変数名の補完

コマンドラインでTAB文字を入力すると、Octaveは変数、関数、ファイル名の補完を試みます(Bashタブ補完に似ています)。Octaveは、カーソルの前のテキストを補完する名前の最初の部分として使用します。[ 31 ]

コマンド履歴

対話的に実行する場合、Octave は入力されたコマンドを内部バッファに保存し、呼び出して編集できるようにします。

データ構造

Octave には、構造体でデータを整理するための機能が限定的に含まれています。この例では、要素abc (それぞれ整数、配列、文​​字列)を持つ構造体xが示されています。

オクターブ: 1 > x . a = 1 ; x . b = [ 1 , 2 ; 3 , 4 ]; x . c = "文字列" ;オクターブ: 2 > x . a ans = 1オクターブ: 3 > x . b ans =1 2 3 4オクターブ: 4 > x . c ans =文字列オクターブ: 5 > x x =フィールド含むスカラー構造体:a = 1 b =1 2 3 4c =文字列

短絡ブール演算子

Octave の論理演算子&&と は、要素ごとの演算子や とは対照的に、短絡方式で評価されます( C言語の対応する演算子と同様) 。 ||&|

インクリメント演算子とデクリメント演算子

Octave は C 言語のようなインクリメント演算子とデクリメント演算子を++--前置形式と後置形式の両方で備えています。また、拡張代入x += 5も実行できます。 例 :

アンワインドプロテクト

Octaveは、 Lispのをモデルにした限定的な例外処理をサポートしています。unwind_protectブロックの一般的な形式は次のようになります。 unwind_protect

unwind_protect本体unwind_protect_cleanupクリーンアップend_unwind_protect

一般的なルールとして、GNU Octave は、与えられたブロックの終了として、blockキーワードend(MATLAB 言語と互換性がある)か、より具体的なキーワード (場合によっては )のいずれかを認識します。結果として、ブロックは、例のようにキーワード 、またはより移植性の高いキーワード のいずれかで終了することができます。 endblockend_blockunwind_protectend_unwind_protectend

ブロックのクリーンアップ部分は常に実行されます。ボディ部分で例外が発生した場合、ブロック外に例外が伝播する直前にクリーンアップunwind_protectが実行されます。

GNU Octave は、別の形式の例外処理もサポートしています (MATLAB 言語と互換性があります)。

try body catch exception_handling end

この後者の形式は、unwind_protectブロックとは2つの点で異なります。まず、exception_handlingはbodyによって例外が発生した場合にのみ実行されます。次に、 exception_handlingの実行後、例外はブロック外に伝播しません(exception_handlingrethrow( lasterror )コード内に明示的にステートメントが挿入されない限り)。

可変長引数リスト

Octave には、明示的な上限値なしに不特定の数の引数を取る関数を処理するためのメカニズムがあります。0個以上の引数のリストを指定するには、vararginリストの最後(または唯一の)引数として特別な引数を使用します。vararginは、すべての入力引数を含むセル配列です。

関数s = plus ( varargin ) if ( nargin == 0 ) s = 0 ; else s = varargin { 1 } + plus ( varargin { 2 : nargin }); end end

可変長の戻りリスト

関数は、特殊な戻り値を使用することで、任意の数の値を返すように設定できますvarargout。例えば、次のようになります。

関数varargout = multiassign ( data ) for k = 1 : nargout varargout { k } = data (:, k ); end end

C++統合

OctaveコードをC++プログラム内で直接実行することも可能です。例えば、以下は呼び出しのコード例ですrand([10,1])

#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 ());

C および C++ コードは、oct ファイルを作成するか、MATLAB 互換のMEX ファイルを使用することによって GNU Octave に統合できます。

MATLABとの互換性

Octave は MATLAB との互換性を考慮して構築されており、MATLAB と多くの機能を共有しています。

  1. 基本データ型としての行列。
  2. 複素数の組み込みサポート。
  3. 強力な組み込み数学関数と広範な関数ライブラリ。
  4. ユーザー定義関数の形式での拡張性。

Octave は MATLAB との非互換性をバグとして扱うため、 Lotus v. Borland裁判例 によればソフトウェアの著作権を侵害しないソフトウェア クローンとみなされる可能性があります。

MathWorksのFileExchangeリポジトリにあるMATLABスクリプトは、原則としてOctaveと互換性があります。しかし、Octaveと互換性のある適切オープンソースBSDライセンスの下でユーザーによって提供・アップロードされているにもかかわらず、FileExchangeの利用規約では、 MathWorks独自のMATLAB以外での使用は禁止されています。[ 32 ] [ 33 ] [ 34 ]

構文の互換性

いくつかの意図的な、しかし些細な構文の追加が あります。2012-04-26にWayback Machineアーカイブされています

  1. コメント行の先頭には、# 文字と % 文字を付けることもできます。
  2. さまざまなC ベースの演算子++--+=、*=、/= がサポートされています。
  3. カスケードインデックスを使用すると、新しい変数を作成せずに要素を参照できます。例: [1:10](3);
  4. 文字列は、二重引用符 " 文字と一重引用符 ' 文字を使用して定義できます。
  5. 変数の型がsingle (単精度浮動小数点数) の場合、Octave は単一領域 (MATLAB は二重領域) で「平均」を計算します。これは高速ですが、結果の精度は低くなります。
  6. ブロックは、endif、endfor、endwhile などのより具体的な制御構造キーワードで終了することもできます。
  7. 関数はスクリプト内および Octave プロンプトで定義できます。
  8. do-until ループの存在 ( C のdo-whileに似ています)。

機能の互換性

数多くのMATLAB関数の多くはGNU Octaveで利用可能ですが、すべてではありません。その一部はOctave Forgeのパッケージからアクセスできます。OctaveコアパッケージまたはForgeパッケージの一部として利用可能な関数は、Wayback Machineに2024年3月14日にアーカイブさています。

利用できない関数のリストはOctave関数に含まれています 。実装されていない関数は、 Octave Wiki__unimplemented.m__の多くのOctave Forgeパッケージにも記載されています。

実装されていない関数が呼び出されると、次のエラー メッセージが表示されます。

オクターブ: 1 >ガイド警告: 'ガイド'関数まだOctave実装されてません不足している機能修正方法について< http : // www . octave . org / missing . html >をご覧ください。エラー:11付近に'guide'が定義されていません

ユーザーインターフェース

Octaveには、公式のグラフィカルユーザーインターフェース(GUI)とQtベースの統合開発環境(IDE)が付属しています。これはOctave 3.8から利用可能であり、[ 35 ] 、 Octave 4.0のリリースで(コマンドラインインターフェースよりも)デフォルトのインターフェースになりました。 [ 12 ] EDNの寄稿者からは好評で、2014年に当時の新しいGUIをレビューした際に「[Octave]は非常に使いやすいGUIになりました」と評されました。[ 36 ]

コーディング教育用の ToolboXなど、サードパーティ製のグラフィカル フロントエンドもいくつか開発されています。

GUIアプリケーション

Octaveコードを使えば、GUIアプリケーションを作成できます。「GUI開発(GNU Octave(バージョン7.1.0))」を参照してください。以下にいくつか例を示します。

ボタン、編集コントロール、チェックボックス

# 図とその上にパネルを作成しますf = figure ; # ボタンを作成します (既定のスタイル) b1 = uicontrol ( f , "string" , "A Button" , "position" ,[ 10 10 150 40 ]); # 編集コントロールを作成しますe1 = uicontrol ( f , "style" , "edit" , "string" , "editable text" , "position" ,[ 10 60 300 40 ]); # チェックボックスを作成しますc1 = uicontrol ( f , "style" , "checkbox" , "string" , "a checkbox" , "position" ,[ 10 120 150 40 ]);

テキストボックス

prompt = { "幅" , "高さ" , "奥行き" }; defaults = { "1.10" , "2.20" , "3.30" }; rowscols = [ 1 , 10 ; 2 , 20 ; 3 , 30 ]; dims = inputdlg ( prompt , "ボックスの寸法を入力してください" , rowscols , defaults );

メッセージ ボックス付きのリスト ボックス。

my_options = { "1つの項目" , "別の" , "さらに別の" }; [ sel , ok ] = listdlg ( "ListString" , my_options , "SelectionMode" , "複数" ); if ( ok == 1 ) msg​​box ( "選択した項目:" ); for i = 1 : numel ( sel ) msg​​box ( sprintf ( "\t%s" , my_options { sel ( i )})); endfor else msgbox ( "キャンセルしました。" ); endif

ラジオボタン

# 図とその上にパネルを作成しますf = figure ; # ボタン グループを作成しますgp = uibuttongroup ( f , "Position" , [ 0 0.5 1 1 ]) # グループ内にボタンを作成しますb1 = uicontrol ( gp , "style" , "radiobutton" , "string" , "Choice 1" , "Position" , [ 10 150 100 50 ]); b2 = uicontrol ( gp , "style" , "radiobutton" , "string" , "Choice 2" , "Position" , [ 10 50 100 30 ]); # グループに属さないボタンを作成しますb3 = uicontrol ( f , "style" , "radiobutton" , "string" , "Not in the group" , "Position" , [ 10 50 100 50 ]);

パッケージ

Octaveには多くのパッケージが用意されています。これらのパッケージは、Octave-Forge (Octave Forge - Packages)またはGitHub Octave Packages(Octave Packages)から入手できます。誰でもパッケージを作成・メンテナンスできます。

他の類似ソフトウェアとの比較

GNU Octaveのオープンソースライセンスの代替としては、前述のMATLAB以外に、ScilabFreeMatがある。[ 37 ] [ 38 ] [ 39 ] [ 40 ] OctaveはScilabよりもMATLABとの互換性が高く、[ 37 ] [ 41 ] [ 42 ] FreeMatは2013年6月以降更新されていない。[ 43 ]

また、Julia プログラミング言語とそのプロット機能は、GNU Octave と類似点があります。

参照

注記

  1. ^ 2007年10月12日からGPL-3.0以降。
  2. ^ 1992年2月19日から2007年10月11日まではGPL-2.0以降。

参考文献

  1. ^ Rik (2015年6月10日). "contributors.in" . 2015年6月14日閲覧
  2. ^ "本格的な開発は 1992 年の春に始まりました。最初のアルファ リリースは 1993 年 1 月 4 日、バージョン 1.0 は 1994 年 2 月 17 日にリリースされました。
  3. ^ 「バージョン10.3.0がリリースされました」。2025年9月23日。 2025年10月16日閲覧
  4. ^ "Building - Octave" . wiki.octave.org . GNU . 2018年5月1日閲覧
  5. ^ 「バスク語、ベラルーシ語、カタロニア語、中国語、オランダ語英語、フランス語、ドイツ語、ハンガリー語、イタリア語、日本語、ラトビア語、ポルトガル語(ブラジル)、ポルトガル語(ポルトガル)、ロシア語、スペイン語、トルコ語、ウクライナ語」。hg.savannah.gnu.org
  6. ^ 「GNU Octaveについて」 . www.gnu.org . GNU . 2018年5月1日閲覧
  7. ^ 「Octave 9.2.0 リリース」 . octave.org . 2024年6月7日. 2024年11月5日閲覧
  8. ^ a b Eaton, John W. 「About Octave」 。 2009年6月28日閲覧
  9. ^ 「 GNU Octave バージョン 1」。www.gnu.org
  10. ^ 「 GNU Octave バージョン 2」。www.gnu.org
  11. ^ 「 GNU Octave バージョン 3」。www.gnu.org
  12. ^ a b 「 GNU Octave バージョン 4.0」。www.gnu.org
  13. ^ 「GNU Octave 4.0.0 リリース」www.gnu.org . 2015年5月29日。
  14. ^ 「GNU Octave 4.0.1 リリース」www.gnu.org . 2016年3月23日。
  15. ^ 「GNU Octave 4.0.3 リリース」www.gnu.org . 2016年7月2日。
  16. ^ 「 GNU Octave バージョン 5」。www.gnu.org
  17. ^ 「GNU Octave 6.1.0 リリース」www.gnu.org . 2020年11月26日。
  18. ^ 「GNU Octave 7.1.0 リリース」www.gnu.org . 2022年4月6日。
  19. ^ 「GNU Octave 8.1.0 リリース」 . octave.org . 2023年3月7日.
  20. ^ 「GNU Octave バージョン9」 . octave.org . 2024年3月25日閲覧
  21. ^ “Octave 9.2.0 リリース” . octave.org . 2024年6月7日. 2024年11月5日閲覧
  22. ^ 「社会保障番号の脆弱性発見はスーパーコンピューティングに頼る」 2009年7月8日。2012年2月29日時点のオリジナルよりアーカイブ
  23. ^ 「GNU Octaveのドロップインアクセラレーション」。NVIDIA開発者ブログ。2014年6月5日。
  24. ^ 「GNU Octave - サブプロセスの制御」 2008年11月14日. 2009年1月7日時点のオリジナルよりアーカイブ2009年1月28日閲覧。
  25. ^ "GNU Octave" . 2009年1月28日閲覧。
  26. ^ 「バージョン3.2におけるユーザーにとって目に見える重要な変更点の概要」2012年1月5日閲覧。
  27. ^ 「FAQ: MATLABの互換性」 。 2011年11月21日時点のオリジナルよりアーカイブ2009年4月4日閲覧。
  28. ^ 「FAQ: Octaveの入手方法」 。 2011年11月21日時点のオリジナルよりアーカイブ2009年4月4日閲覧。
  29. ^ 「トップ (GNU Octave (バージョン 6.3.0))」 . octave.org .
  30. ^ 「Octave for Android - Octave」 . wiki.octave.org . 2021年8月23日閲覧
  31. ^ Eaton, John W. 「Letting Readline Type For You」 GNU Octave リファレンスマニュアル. 2018年2月12日時点のオリジナルよりアーカイブ。 2016年7月29日閲覧
  32. ^ 「FAQ - Octave」 . wiki.octave.org . 2022年12月5日閲覧
  33. ^ 「MATLAB Central 利用規約」 . www.mathworks.com . 2022年12月5日閲覧。
  34. ^ 「File Exchange Licensing FAQ」 . www.mathworks.com . 2022年12月5日閲覧。
  35. ^ 「 GNU Octave バージョン 3.8」。www.gnu.org
  36. ^ Hageman, Steve (2014年2月7日). 「GNU Octaveが好調なスタートEDN .
  37. ^ a bトラッペンバーグ、トーマス (2010). 『計算神経科学の基礎』オックスフォード大学出版局. p. 361. ISBN 978-0-19-956841-3
  38. ^ Muhammad, A ; Zalizniak, V (2011). 『実用科学コンピューティングWoodhead Publishing . p.  3. ISBN 978-0-85709-226-7
  39. ^ Megrey, Bernard A.; Moksness, Erlend (2008).水産研究におけるコンピューター利用. Springer Science & Business Media. p.  345. ISBN 978-1-4020-8636-6
  40. ^ Kapuno, Raul Raymond (2008). 『C、C++、MATLAB を用いた化学エンジニアのためのプログラミング』 Jones & Bartlett Publishers. p. 365. ISBN 978-1-934015-09-4
  41. ^ハーマン、ラッセル L. (2013). 『物理学者のための数学的手法講座』CRC Press. p. 42. ISBN 978-1-4665-8467-9
  42. ^ Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014). MATLAB、Octave、Scilab による ODE/PDE モデルのシミュレーション:科学技術アプリケーション. Springer. pp.  114– 115. ISBN 978-3-319-06790-2
  43. ^ "FreeMat" . freemat.sourceforge.net . 2020年2月22日閲覧

さらに読む