GNU OctaveはMatlab互換の数値計算用言語です.

目次

  1. スクリプトファイル
  2. パッケージのインストール
  3. プロット
    1. 2次元プロット
      1. 書式
      2. ラベル
    2. 3次元プロット
      1. 範囲
    3. 等高線
  4. ログをとる
    1. 作業記録の書き出し
    2. 変数の保存・読み込み
  5. 文法
    1. for文
    2. while文
    3. if文
    4. switch文
  6. 関数
    1. 定義
    2. 関数ファイル
    3. typeコマンド
  7. 行列
    1. 特殊な行列
    2. 行数・列数の取得
    3. 行列の一部の取得
    4. 別の記法
    5. 結合
    6. トレース
    7. 行列式
    8. 固有値
    9. 階数
    10. 連立一次方程式を解く
  8. 参考文献

スクリプトファイル

拡張子.mで,関数ファイルではないもの.
パスが通っているところにファイルを置いておき,拡張子を除いた部分を直接コマンド行に打ち込めば,実行することができる.

パッケージのインストール

Octave v.5.2.0で正規分布のCDFnormcdfやPDFnormpdfを使おうとしたら,次のメッセージが出た.

warning: the 'normpdf' function belongs to the statistics package from Octave
Forge which seems to not be installed in your system.

そこで,Octaveの対話中にOctave Forgeから次の形式でパッケージをインストールする.

pkg install -forge パッケージ名

今回は統計用のstatisticsパッケージを入手する.
ioパッケージが要件になっていたので,そちらを先にインストールした.)

入手したパッケージは次のようにロードする.

pkg load パッケージ名

プロット

2次元プロット

グラフは次の要領で描ける.

hold on
x = 0:0.1:10;
y = sin(x);
plot(x, y, "書式;凡例;")
hold off
  • hold onによりグラフを重ね書きする.
  • grid onしておくと,グラフに格子が入る.

書式

列挙順は任意で,

  • 色:r(赤),g(緑),b(青)など
  • 線種:-.-o-xなど

ラベル

  • title("タイトル")
  • xlabel("x軸名")

3次元プロット

例は次の通り.

x = 0:10;
y = 0:10;
[X, Y] = meshgrid(x,y)
Z = X + Y;
mesh(x, y, Z)
  1. x, y軸の範囲を与え,meshgrid関数で同じサイズの行列X, Yを作る.
  2. z軸を定める.
  3. mesh関数でによって描く

範囲

  • linespace(初項, 最終項, 項数)の形でx, yを与えることもできる.

等高線

描くのにcontour関数を使う.

contour(x, y, Z, 等高線の本数)
  • 等高線の本数に代えてベクトルを与えると,各成分に等しい高さで等高線が描かれる.

ログをとる

作業記録の書き出し

Octaveには,作業のログをとるdiaryコマンドが用意されている.

diary ファイル名
(計算)
diary off

変数の保存・読み込み

保存

save ファイルパス

読み込み

load ファイルパス

文法

for文

for i = 1:10
i + 1
endfor
  • breakcontinueが使える

while文

i = 1
while i < 10
i = i++
endwhile

if文

if 条件1
処理1
elseif 条件2
処理2
else
処理その他
endif
  • または||,かつ&&で短絡評価
  • ! 条件で真偽値反転

switch文

switch x
case 1
disp('1')
case {2 4 'a' 'b'}
disp(x)
otherwise
error('error message')
endswitch

関数

定義

関数定義にはfunctionコマンドを使う.

function y = myplus(x)
y = x + 1
end function

clearコマンドで関数を除去できる.

関数ファイル

拡張子.mで冒頭がfunctionなら関数ファイルとみなす.

typeコマンド

typeコマンドでパスと定義を調べることができる.

行列

mat = [1 2; 3 4; 5 6]
  • 転置行列はmat'
  • 逆行列はinv(mat)

特殊な行列

  • ゼロ行列はzeros(行数, 列数)
  • 成分1の行列はones(行数, 列数)
  • 単位行列はeye(行数)
  • 対角行列はdiag([1 2 3])のような形
  • 上(下)三角行列はtriu(ones(3))tril)のような形で,triu(ones(3), 1)として対角成分から1段分(すなわち,対角成分)をゼロにするオプションもある

行数・列数の取得

rows(mat)
columns(mat)
  • size(mat)を使えば,行数・列数が配列で返る.

行列の一部の取得

成分の取得はmat(行, 列)とする.(列ベクトルなら,行を省略できる.)

mat(1:2, 3:4)とすると,1-2行目の3-4列を使った行列を返す.
この場合,行/列で単に:だけ書けば,全ての行/列での意味になる.

不要行を除去するには,その行に空の行を代入すればよい.
すなわち,mat(1, :) = []とすると,1行目を除去できる.

別の記法

次のような形式でもクロスする部分の成分を使ったより小さな行列を作ることができる.

mat([1 2], [3 4])

結合

  • 行結合:[A; B]
  • 列結合:[A B]

トレース

trace(mat)

行列式

det(mat)

固有値

% 1変数に代入すると、固有値の列ベクトルを返す
v = eig(mat)

% 2変数に代入すると、固有ベクトルを並べた行列と固有値の対角行列を返す
[V, Lambda] = eig(mat)

階数

rank(mat)

連立一次方程式を解く

Ax = bの形式を解くには,

x = A \ b

参考文献

線形代数学と統計学の基礎的な内容をOctaveによって確認しながら進めるテキストです.

  • 戸田, 山田 (2007)「計量経済学の基礎」東京大学出版会.