この文書は,フリーの数値解析ソフト GNU Octave (以下 octave )の使い方のごく一部を説明するためのものです.
2008年5月現在,octaveの最新版は version 3.0.1 ですが,この文書は, 龍谷大学瀬田学舎の計算機室のLinux-PCにインストールされている version 2.1.73 を想定して書いてあります. ver.3 と ver.2 は結構違うところがあるようです.
ターミナル上で octave というコマンドを実行すると,octaveが起動します.
$ octave GNU Octave, version 2.1.73 (i686-pc-linux-gnu). (途中の出力省略) octave:1>
最後の "octave:1>" というのは octave がキー入力を促していることを示すもの(プロンプト)です. quitと入力すると終了します.
octave:1> quit $
octave:1> A = [4 -1 1; -1 4 -1; 1 -1 4] A = 4 -1 1 -1 4 -1 1 -1 4 octave:3> s2=1/sqrt(2) s2 = 0.70711 octave:4> s3=1/sqrt(3) s3 = 0.57735 octave:5> s6=1/sqrt(6) s6 = 0.40825 octave:6> U = [s3 s2 -s6; -s3 s2 s6; s3 0 2*s6] U = 0.57735 0.70711 -0.40825 -0.57735 0.70711 0.40825 0.57735 0.00000 0.81650 octave:7> U'*A*U ans = 6.00000 0.00000 0.00000 0.00000 3.00000 0.00000 0.00000 0.00000 3.00000
上記では,(手計算で求めた)行列Aの固有値分解の結果を確認していますが,octave に固有値・固有ベクトルを計算させることももちろんできます(方法は自分で調べてみよう).
下記のようなファイルを作成し,demo01.m という名前で保存してあるとする.
A = [4 -1 1; -1 4 -1; 1 -1 4] s2=1/sqrt(2) s3=1/sqrt(3); s6=1/sqrt(6) U = [s3 s2 -s6; -s3 s2 s6; s3 0 2*s6]; U'*A*U
このとき,demo01.m のあるディレクトリ上でoctaveを起動し
octave> demo01
とすると,demo01.m が読み込まれて実行される.
octave:2> demo01 A = 4 -1 1 -1 4 -1 1 -1 4 s2 = 0.70711 s6 = 0.40825 ans = 6.00000 0.00000 0.00000 0.00000 3.00000 0.00000 0.00000 0.00000 3.00000
セミコロン ";" のついてる行とついてない行の動作の違いに注意(その1のようにインタラクティブに実行する場合も同様).
カレントディレクトリに次の内容のテキストファイル hoge.txt があるとき,
11 12 13.33 21 22 23
octave> x = load("hoge.txt") x = 11.000 12.000 13.330 21.000 22.000 23.000
とすれば,このファイルの内容を行列 x に読み込むことができます(テキストファイル中の見た目そのままの行,列のならびになることに注意).
一方,書き込みは次のようにします.
octave> x = load("hoge.txt"); octave> y = x' y = 11.000 21.000 12.000 22.000 13.330 23.000 octave> save("fuga.txt", "y") ← 変数名も""で囲むことに注意
カレントディレクトリに fuga.txt というファイルが作られているはずです.ただし,内容を less などで確認してみるとわかりますが,次のようにコメント付きになっていますので注意が必要です.
# Created by Octave 2.1.73, Tue May 20 16:34:51 2008 JST <takataka@s1542f160> # name: y # type: matrix # rows: 3 # columns: 2 11 21 12 22 13.33 23