高度なコマンドライン数学-GNU Octave

私が約束したように、私は電卓の交換プログラムのレビューから、より深刻なツールに移行しています 。 前の投稿の図を覚えている場合、2番目のカテゴリは表形式でした: OpenOffice / LibreOffice



関連。 コマンドラインには適用されないため、このゲームは安全にスキップできます。さらに、Habrの読者の中から理解できない人を見つけることは困難です。 したがって、すぐに3番目のカテゴリに進みます。







専門的な数学プログラム、学生レベル+







  1. GNU Octave



  2. Scilab



  3. Maxima



  4. R



  5. Sage





Octave



はこのリストの最初の場所にあり、これは偶然ではありません。 米国メリーランド大学の研究は、単純なシナリオと複雑なシナリオでMATLAB, Octave, SciLab



FreeMat



を使用して数学計算の比較分析を行いました 。 最初のケースでは線形方程式系が解かれ、2番目のケースでは2次元空間でのポアソン方程式の有限差分離散化が解かれました。 主な結論は、 GNU Octaveは他のオープンな数学パッケージよりも優れたタスクに対処し、matlabovskyに匹敵する結果(23ページおよび25ページ)を示しているということです







しかし、最初に、オープンソースの数学プログラムがどのように緩和されたかを理解するための少し歴史的なコンテキスト。







MATLABに追いつき追い越す



商用プログラムが実行されるようになり、数学的計算のクリアを最初に賭けたのは偶然でした。 1970年代後半からすでに。 プログラミング言語の作成者であるClive Mowlerは、 MATLABを米国の大学に配布し、1984年に2人の仲間と共にそれをFortranからCにコピーしてThe MathWorksを作成しまし 。 特に、 以前のバージョンはオープンソースで配布されていました







MATLAB



は、今日のように、2D / 3Dグラフィックス、さまざまな数学関数、対話型プログラミング環境、数値計算、問題解決をサポートする高レベルのPLです。 外部インターフェイスにより、サードパーティのアプリケーションやプログラミング言語と統合できます。 世界中の1,000,000人以上のエンジニアと科学者がMATLAB



使用しており、 MATLAB



多額のお金を払っています。







大きな遅れで、オープンソースプログラムがゲームに含まれています。 1990年代になって初めて、 GNU Octave, Scilab



数学パッケージが登場し、計算プログラミングのリーダーとの競争に参加しました。







もともと化学反応器を設計するためのソフトウェアツールとして考案され 、数学パッケージの作者を教えた化学教授であるOctave Levenshpilにちなんで名付けられたOctave



Fortran



学生をテキサス大学での難しいデバッグに置き換えることを目的としていました。 バージョン1.0は1994年2月17日にリリースされました。プロジェクトは着実に開発されており、今年の7月にOctave 4.0.3



がリリースされました。 ebuildを待っています











Octave



の主な使命は、近い将来、OpenOffice / LibreOfficeがMS Officeに代わってペニーを数えることができるのと同じ方法で、 MATLABの適切な代替品なることです。 実際、このために、 Octave



MATLAB



と互換性のある構文と一連の関数があります。 さらにMATLAB



との非互換性はバグと見なされますが、ソフトウェアThemisにはすでに同様の先例があり、これは著作権の侵害とは見なされません。 この点で、 Octave



ソフトウェアクローンと考えることができます。 完全な互換性についての真実まだ議論されてませんが、この方向での作業は止まりません。







Octave



、標準テンプレートライブラリを使用してC++



記述され、インタラクティブなコマンドインターフェイスを備え、拡張機能をサポートします。ネイティブ言語またはC, C++, Fortran



などで動的にロードされるモジュールですMATLAB



と同様に、 Octave



は代数計算で基本線形ライブラリ代数サブルーチンを使用します(BLAS)および線形代数パッケージ(LAPACK)。







設置



LinuxにOctave



をインストールすることは、他のプログラムをインストールすることと同じです。 Gentoo Linuxでは、次を実行します。







 $ sudo emerge -av octave
      
      





Deebianerはapt



でも同じことを行いapt









 $ sudo aptitude install octave
      
      





SUSEとArchではすべてが非常にシンプルですが、Red HatとCentOSのユーザーは少し手を加える必要があります。 ブラシのフリックでOctave



をインストールしようとして失敗し、パッケージがリポジトリで見つかりませんでした。







 [root@server ~]# yum install octave  : langpacks, product-id, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. HighAvailability | 4.1 kB 00:00:00 ResilientStorage | 4.1 kB 00:00:00 server | 4.1 kB 00:00:00 vmware-tools | 951 B 00:00:00    octave  . :  
      
      





幸いなことに、 回避策があります。 最初にepel-releaseパッケージをインストールする必要があります。







 [root@server ~]# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/ [root@server ~]# yum localinstall epel-release-6-7.noarch.rpm
      
      





そして、 yum install octave



が動作した後にのみ動作します。

最後に、すべての準備が整い、プログラムがインストールされます。







 [root@server ~]# octave GNU Octave, version 3.8.2 Copyright (C) 2014 John W. Eaton and others. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type 'warranty'. Octave was configured for "x86_64-redhat-linux-gnu". Additional information about Octave is available at http://www.octave.org. Please contribute if you find this software useful. For more information, visit http://www.octave.org/get-involved.html Read http://www.octave.org/bugs.html to learn how to submit bug reports. For information about changes from previous versions, type 'news'. octave:1>
      
      





行列演算



時間をbc



ず、前回説明したbc



awk



を使用して繰り返すことができる操作を行います。 マトリックスを少し試してみましょう。







まず、マトリックスの単純な転置:







 octave:1> A=[1 3 5; 2 4 6] A = 1 3 5 2 4 6 octave:2> A' ans = 1 2 3 4 5 6
      
      





連立一次方程式を解こう:







 x + y + z = 9 2x + 4y - 3z = 1 3x + 6y - 5z = 0
      
      





行列A 、ベクトルbを駆動し、方程式Ax = b



を行列形式で解きます







 octave:1> A=[1 1 1; 2 4 -3; 3 6 -5] A = 1 1 1 2 4 -3 3 6 -5 octave:2> b=[9; 1; 0] b = 9 1 0 octave:3> x=A\b x = 7.00000 -1.00000 3.00000
      
      





行列の行列式と固有値を見つけます。







 octave:4> det (A) ans = -1.00000 octave:5> eig (A) ans = -2.88897 2.76372 0.12525
      
      





複素数も計算でサポートされています。







 octave:6> A=[-3 0 2; 1 -1 0; -2 -1 0] A = -3 0 2 1 -1 0 -2 -1 0 octave:7> x=det (A) x = -6 octave:8> y=eig(A) y = -1.00000 + 1.41421i -1.00000 - 1.41421i -2.00000 + 0.00000i
      
      





関数と変数



Octave



変数や関数の作成は、たとえばJavaやCの場合よりもはるかに簡単です。行列の例を使用して、変数の宣言方法を既に見てきました。 新しい関数の作成には次の構文があります







 function [res1, res2, ..., resM] = _ (arg1, arg2, ..., argN)   endfunction
      
      





原則として、新しい関数は別のファイルまたはOctaveスクリプトファイルのいずれかで作成されます

彼女の最初の電話の前に。 別のスクリプトファイルでユーザー定義関数を使用する場合は、もちろん、別のファイルで作成することをお勧めします。 GNU Octaveでは、関数ファイルの拡張子は.mであり、自動的にロードされます。 ファイル名は関数名と完全に一致する必要があります。

二次方程式ax² + bx + c = 0



を解くための関数を書きax² + bx + c = 0









 octave:9> function [x1,x2] = quadr(a, b, c) > D = sqrt(b^2-4*a*c); > x1 = (-bD)/(2*a); > x2 = (-b+D)/(2*a); > endfunction octave:10> [y1,y2]=quadr(a, b, c) y1 = 2 y2 = 3
      
      





GUI



実際、ここではコマンドラインの数学について説明していますが、現時点では、関数グラフの表示方法は明確ではありません。 ただし、ここには秘密はありませんGnuplot



これらの目的に使用されます。 したがって 、追加パッケージodepkg



インストールすることによりLorentz Attractorを描くことができます。







  function [vyd] = froessler (vt, vx) vyd = [- ( vx(2) + vx(3) ); vx(1) + 0.2 * vx(2); 0.2 + vx(1) * vx(3) - 5.7 * vx(3)]; endfunction A = odeset ('MaxStep', 1e-1); [t, y] = ode78 (@froessler, [0 70], [0.1 0.3 0.1], A); subplot (2, 2, 1); grid ('on'); plot (t, y(:,1), '-b;f_x(t);', t, y(:,2), '-g;f_y(t);', \ t, y(:,3), '-r;f_z(t);'); subplot (2, 2, 2); grid ('on'); plot (y(:,1), y(:,2), '-b;f_{xyz}(x, y);'); subplot (2, 2, 3); grid ('on'); plot (y(:,2), y(:,3), '-b;f_{xyz}(y, z);'); subplot (2, 2, 4); grid ('on'); plot3 (y(:,1), y(:,2), y(:,3), '-b;f_{xyz}(x, y, z);');
      
      









Octave



を操作するための最も便利なグラフィカルシェルはQtOctave



プログラムです。 後者はすでに安定しており、 Octave 4.0



リリース以降、パッケージに含まれています。







次は?



疑問が生じるかもしれません:なぜオープンな数学パッケージが必要なのでしょうか? 誰もがオフィスアプリケーションを必要としますが、誰もが遠く離れて、自宅で座っている間にラプラス変換を使用してポアソン方程式を解く必要があります。 大学にとって、 MATLAB



個人や商業組織よりもはるかに安価です。 商業組織は、必要に応じてお金を見つけ、一般の人々は大学で数学をさせたり、コラムと見なしたりします。







もちろん、これは間違った意見です。 オープンソースソフトウェアを使用して実行される科学計算には、追加の「保護レベル」があります。必要に応じて、 誰でも同じ計算を繰り返し、結果の妥当性を確認できるためです。 高価なソフトウェアで実行された同じ計算は、 結果を検証する機能を部分的に遮断しました問題は実際にははるかに広く (英語のテキスト)、問題はオープンなまたは独自の数学プログラムだけではありません。 科学雑誌が原則として、実験結果とモデル検証の保証された繰り返しに十分なデータと方法を提供することを著者に要求しないことは秘密ではありません。 特に、経済学者や投資家は、単にデータを秘密にするだけで罪を犯します。 「分類された」データを含む一連の記事のサンプル間で計算と結論を検証すると、予期しない結果が生じました (英語のテキスト)。 ソフトウェアと同様に、科学は開かれている必要があります 。そのため、開かれた数学的パッケージは社会全体にとって価値があります。







推奨読書



最後の本に加えて、記事で使用されている残りの資料はインターネットで簡単に見つけることができます。 上記のリンクの半分は英語のページにリンクしています。 そこで議論されていることを簡単に報告するか、翻訳を手伝って喜んでいます。










All Articles