GNU Octave 2.1.x 日本語マニュアル/Octaveの簡単な紹介

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

1 Octave の簡単な紹介[編集]

このマニュアルは,GNU Octave の実行,インストール,移植およびバグ報告の方法について記したものです。

GNU Octave は高水準言語であり,主に数値計算向けの言語です。 このソフトウエアは,線形ならびに非線形問題を数値的に解き,他の数値実験を実行するための便利なコマンドラインインターフェースを備えています。 バッチ指向の言語として使用することもできます。

GNU Octave は自由に再配布できるソフトウエアでもあります。 あなたは,Free Software Foundationによって公開されているGNU General Public License の項の下で, このソフトウエア単体,あるいは改変したものを再配布、可能です。 GPL は,このマニュアルの付記F [Copying]に掲載してあります。

このドキュメントは,Octave のバージョン2.1.x 向けに書いてあります。

1.1 Octave の実行[編集]

多くのシステムにおいて,Octave を起動する方法は,シェルから‘octave’ とコマンドを入力することです。 Octaveは起動時メッセージを表示し,入力の受け付け準備ができたことを示すプロンプトを表示します。その後,すぐにOctave コマンドの入力を開始することができます。 もしトラブルが発生したなら,通常はキーボードからControl-C (以降は短縮してC-c と表記する)と入力することにより,Octave を中断することができます。C-c とは,見ての通り,CTRLキーを押しながらc を押すことを表す。これを実行すると,Octave のプロンプトに戻る。 Octave を終了するには,Octave のプロンプトからquitあるいはexit と打ち込みます。 ジョブコントロールをサポートするシステムにおいては,通常はC-z と入力してSIGTSTPシグナルを送ることにより,Octave をサスペンドすることができます。

1.2 簡単な例[編集]

以降の章においては,Octave の全機能について詳細に記述してあります。しかし,その前に,その機能のいくつかについて例を示すことが役立ちます。 もしOctave に初めて触れるなら,Octave を学び始めるために,ここに示す例を試すことをお勧めします。

‘:octave:13>’

のように示した行は,実際に打ち込む行を表し,入力後に改行キーを押す。Octave は答えを返すか,グラフを表示します。

行列をつくる[編集]

新しい行列を作成して変数に格納しておけば,それを後から参照することができます。以下のコマンドを入力せよ。

octave:1> a = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ]

Octave は,きちんと列をそろえて,行列を表示してくれる。コマンドの終端にセミコロンをつけると,結果を画面に表示しない命令になります。たとえば,

octave:2> b = rand (3, 2);

このコマンドは,3 行2 列の行列を作るものです。その各要素には,0 から1 までの範囲のランダムな数値がセットされます。 任意の変数の値を表示するためには,単に変数名を入力するだけです。 たとえば,行列b に格納された行列を表示すためには,以下のように入力します。

octave:3> b

行列[編集]

Octave には,行列演算を行うための便利な演算子表記ができます。たとえば,行列aにスカラを乗じるには,以下のコマンドを入力します。

octave:4> 2 * a

ふたつの行列a とb を乗じるには,以下のコマンドを入力します。

octave:5> a * b

積aTa, を計算するためには,以下のコマンドを入力します。

octave:6> a' * a

一次方程式を解く[編集]

連立一次方程式ax = b を解くためには,左除算演算子‘\’ を使用します:

octave:7> a \ b

これは,概念的にはa-1b, とすることと等しい。しかし,左除算演算子を使用することによって,逆行列を計算することが避けられます。 もし係数行列が特異ならば,Octave は警告メッセージを表示し,最小ノルム解を表示します。

微分方程式の積分[編集]

Octave には,以下の形式の非線形微分方程式を解くための組み込み関数があります。

dx/dt= f(x; t); x(t = t0) = x0

Octave にて,この形式の方程式を積分するためには,最初に関数の定義f(x; t) を提供しなければなりません。 これは簡単で,関数の本体をコマンドラインから入力することで遂行できます。 たとえば,以下のコマンドは,非線形微分方程式の面白いペアについて,右辺の関数を定義しています。 関数を入力している間は,入力が完成するまで待っていることを示す異なるプロンプトになることに注意します。

octave:8> function xdot = f (x, t)
>
> r = 0.25;
> k = 1.4;
> a = 1.5;
> b = 0.16;
> c = 0.9;
> d = 0.8;
>
> xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
> xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
>
> endfunction

初期条件を入力します。

x0 = [1; 2];

そして,出力時間を列ベクトルとして入力する(最初の出力時間は,上で入力した初期条件に対応したものであることに注意してください)。

t = linspace (0, 50, 200)';

微分方程式の組を積分することは簡単です:

x = lsode ("f", x0, t);

この関数lsode は通常微分方程式に対するLivermore Solver を使用しています。これは,以下の文献に記述されています:

A. C. Hindmarsh, ODEPACK, a Systematized Collection of ODE Solvers, in: Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pages 55-64.

グラフ出力の実行前の例の解を,グラフで表示するためには,コマンド

plot (t, x)

を使用します。 もしX Window System を使用しているならば,Ocatve は,プロットを表示するために自動的に別ウインドウを開く。 もし他のグラフィック関係のコマンドをサポートする端末を使用しているならば,使用している端末をOctave に教える必要があります。 サポートしている端末の種類のリストを見るには,以下のコマンドを入力します。

gset term

Octave は,グラフを表示するためにgnuplot を使用します。 そして,gnuplot がサポートする任意の端末において,画像を出力することができます。 plot コマンドの出力を,直接端末に送らずにファイルに取り込むには,以下のような一連のコマンドを使用することができます。

gset term postscript
gset output "foo.ps"
replot

これは,他の出力デバイスについても同様に働きます。Octave のgset コマンドは,現実には単にgnuplot サブプロセスにパイプしているだけです。その結果,いちど好みのプロットをスクリーンに表示すると,画像を印刷するのに適した出力ファイルを作成するため,これと同様の方法を実行することができます。 あるいは,以下のようなコマンドを使うことにより,中間ファイルを削除することができます。

gset term postscript
gset output "|lpr -Pname_of_your_graphics_printer"
replot

入力した内容の編集[編集]

Octave のプロンプトでは,Emacs あるいはvi スタイルの編集コマンドにより,以前に入力したコマンドの再呼び出し,編集,再実行ができます。 標準状態のキー割り当てでは,Emacs スタイルのコマンドを使用します。たとえば,以前のコマンドを呼び出すには,Control-p(以降は,単にC-p と表記する)と打ち込む。 C-p とは,見ての通り,CTRL を押しながらp を押すことを表す。 これを行うことにより,以前の入力行を呼び戻すことができます。 C-n は,次の入力行に進めることになります。C-b はカーソルを行末に移動させ,C-f はカーソルを行頭に向けて移動させる。 このほかにも,いくつもキーが定義されています。 コマンドライン編集機能についての完全な記述は,このマニュアルのSection 2.4 [Command Line Editing]にあります。

ヘルプとドキュメント[編集]

Octave は,豊富なヘルプ機能をもっています。印刷物として入手できるドキュメントは,Octave のプロンプトからも読むことができます。これは,両方の文書形式とも同じ入力ファイルから作成されているからです。 よいヘルプを得るためには,まず,あなたが使いたいコマンドの名前を知る必要があります。関数の名前は,必ずしも明らかではないかもしれません。 しかし,初心者にとって良い方法は,単にhelpと入力することです。 このコマンドは,すべての演算子,予約語,関数,組み込み変数および関数ファイルを表示します。 help コマンドの引数に名前を含めることによって,より多くのヘルプを得ることができます。たとえば,

help plot

これは,plot 関数に対するヘルプ文章を表示します。 Octave では,長すぎて一画面に収まらない出力は,less やmore のようなページャに送ります。 1 行進めるにはRET,1 ページ進めるにはSPC,ページャを抜けるにはq を押します。 Octave 内から印刷マニュアルの完全な文章を読めるような,Octave のヘルプ機能の一部は,Infoと呼ばれる別のプログラムを使用します。Info を呼び出すとき,Octave のマニュアルを含むメニュー型プログラムに入る。 Info を使用するためのヘルプは,このマニュアルのSection 2.3 [GettingHelp]に記述してあります。

1.3 表記法[編集]

この節では,本マニュアルで使用されている表記方法について説明します。この節は読み飛ばしてもよいし,後で参照し直してもよい。

1.3.1 フォント[編集]

Octave コードの例は,svd (a) のようなフォントまたは形式で表す。引数や説明用の変数を表 すときは,first-number のようなフォントまたは形式で表す。シェルのプロンプトに打ち込むコ マンドは,‘octave --no-init-file’ のようなフォントまたは形式で表す。Octave のプロン プトに打ち込むコマンドは,foo --bar --baz のようなフォントまたは形式で表す。キーボー ド上の特定のキーを表すには,ANY のような形式です。

1.3.2 命令結果の表記[編集]

このマニュアルの例において,あなたが命令した結果は,‘⇒’ で示します。たとえば,

sqrt (2)
⇒ 1.4142

とる。これは,「sqrt (2) は1.4142 と計算された」と読む。 場合によっては,条件式によって返される行列の値は,以下のように表示されます。

[1, 2; 3, 4] == [1, 3; 2, 4]
⇒ [ 1, 0; 0, 1 ]

その他の場合には,行列は以下のように表示されます。

eye (3)
1 0 0
0 1 0
0 0 1

これは,結果の構造をはっきりと示すためです。 ときどき,ある表現を記述する手助けのため,同じ結果を返す別の表記をすることがあります。 全く等価な表現は,‘≡’ で示します。たとえば,以下のようになります。

rot90 ([1, 2; 3, 4], -1)
rot90 ([1, 2; 3, 4], 3)
rot90 ([1, 2; 3, 4], 7)

1.3.3 出力の表記[編集]

このマニュアルに掲載した例の多くは,式が評価されたときに表示される文字列を表示しています。 このマニュアルにある例は,出力された文字列を‘ a ’ で示しています。式を評価するときに返される 値(以下の例では1)は,別の行に‘⇒’ で表示しています。

printf ("foo %s\n", "bar")
a foo bar
⇒ 1

1.3.4 エラーメッセージ[編集]

中にはエラーを返す例もあります。これは,通常はエラーメッセージを端末に表示します。エラーメッセージは,error: から始まる行で示します。

struct_elements ([1, 2; 3, 4])
error: struct_elements: wrong type argument `matrix'

1.3.5 解説のフォーマット[編集]

関数,コマンドおよび変数の解説は,このマニュアルでは同一の書式で記述しています。解説の最初の行は名前(関数名,コマンド名および変数名)に続いて,必要に応じて引数が含まれる。

カテゴリ,関数,変数などは,右端に表示します。次の行以降に解説が続き,時には例題も示します。

1.3.5.1 簡単な関数の解説[編集]

関数の解説において,関数名が最初に表れる。同じ行には,引数のリストが続いています。引数の名前は,解説中においても使用しています。 架空の関数foo の解説例です:

foo (x, y, . . . )           [Function]

関数foo は,y からx を減じ,その結果に残りの引数を加算します。もしy が与えられなければ,かわりに標準状態で19 を使用します。

foo (1, [3, 5], 3, 9)
⇒ [ 14, 16 ]
foo (5)
⇒ 14

より一般には,以下のようになります。

foo (w, x, y, ...)
x - w + y + ...

その名前に型の名称を含む引数(たとえばinteger,integer1 あるいはmatrix)は,その型であることを期待しています。object と名付けた引数は,何らかの型となります。その他の種類の名前(たとえばnew file)は,関数の解説において具体的に論じています。ある節の中には,いくつかの関数に共通な引数の機能について,解説の最初に述べています。 Octave の関数は,いくつかの方式によって定義されています。関数についてのカテゴリ名は,関数が定義された方法を表す名称を表しています。これら付加的な情報は,以下のようなものです。

Built-in Function[編集]

この表記のある関数は,C++,C あるいはFortran言語で書かれていて,コンパイル済みのOctave バイナリの一部です。

Loadable Function[編集]

この表記のある関数は,C++,C あるいはFortran 言語で書かれています。ユーザが供給した関数のダイナミックリンクをサポートするシステムでは,Octave を実行している間に,必要なときにだけ自動的にリンクされます。Section 13.8 [Dynamically Linked Functions]を参照してください。

Function File[編集]

この表記のある関数は,Octave コマンドを使用して書かれており,テキストファイルに保存してあります。 Section 13.6 [Function Files]を参照してください。

Mapping Function[編集]

この表記のある関数は,引数として与えた行列およびベクトルの,各要素に対してそれぞれ処理を行います。

1.3.5.2 簡単なコマンドの解説[編集]

コマンドの解説は,関数の説明と似た形式です。 ただ,‘関数’ が‘コマンド’ に置きかわっているだけです。 コマンドとは,引数をかっこでくくらないで呼び出す関数です。 たとえば,Octave のcd コマンドについての解説を示します。

cd dir [Command]
chdir dir [Command]

現在の作業ディレクトリをdir に変更します。 たとえば,cd ~/octave は,現在の作業ディレクトリを‘~/octave’ に移動します。 もし,そのディレクトリが存在しないならば,エラーメッセージを表示し,作業ディレクトリは変更されない。

1.3.5.3 簡単な変数の解説[編集]

変数とは,値を保持することのできる名前です。任意の変数は,ユーザによってセットすることができますが,ユーザがOctave の挙動を変更することができるようにするために,形式的に組み込み変数(built-in variables)が存在します(組み込み変数は,ときどきユーザオプションとも呼ばれます)。

通常の変数および組み込み変数は,引数が無いことを除いて関数と同様の解説を行っています。

架空の組み込み変数do_what_i_mean_not_what_i_say. についての解説例を示します。

do_what_i_mean_not_what_i_say
[Built-in Variable]
もしこの変数がゼロでないならば,たとえあなたが完全に間違っていて意味のないコマンドリストを
入力したとしても,Octave はあなたが本当にやりたかったことを実行します。

他の変数の解説は,同様の書式をとっています。 しかし,‘組み込み変数’ は通常の‘変数’,あるいは変更されない‘定数’ に置き換えられます。