GNU Octave
GNU OctaveはMatlab互換の数値計算用言語です.
目次
スクリプトファイル
拡張子.m
で,関数ファイルではないもの.
パスが通っているところにファイルを置いておき,拡張子を除いた部分を直接コマンド行に打ち込めば,実行することができる.
パッケージのインストール
Octave v.5.2.0で正規分布のCDFnormcdf
やPDFnormpdf
を使おうとしたら,次のメッセージが出た.
warning: the 'normpdf' function belongs to the statistics package from Octave |
そこで,Octaveの対話中にOctave Forgeから次の形式でパッケージをインストールする.
pkg install -forge パッケージ名 |
今回は統計用のstatistics
パッケージを入手する.
(io
パッケージが要件になっていたので,そちらを先にインストールした.)
入手したパッケージは次のようにロードする.
pkg load パッケージ名 |
プロット
2次元プロット
グラフは次の要領で描ける.
hold on |
hold on
によりグラフを重ね書きする.grid on
しておくと,グラフに格子が入る.
書式
列挙順は任意で,
- 色:
r
(赤),g
(緑),b
(青)など - 線種:
-
,.
,-o
,-x
など
ラベル
title("タイトル")
xlabel("x軸名")
3次元プロット
例は次の通り.
x = 0:10; |
- x, y軸の範囲を与え,
meshgrid
関数で同じサイズの行列X, Yを作る. - z軸を定める.
mesh
関数でによって描く
範囲
linespace(初項, 最終項, 項数)
の形でx
,y
を与えることもできる.
等高線
描くのにcontour
関数を使う.
contour(x, y, Z, 等高線の本数) |
- 等高線の本数に代えてベクトルを与えると,各成分に等しい高さで等高線が描かれる.
ログをとる
作業記録の書き出し
Octaveには,作業のログをとるdiary
コマンドが用意されている.
diary ファイル名 |
変数の保存・読み込み
保存
save ファイルパス |
読み込み
load ファイルパス |
文法
for文
for i = 1:10 |
break
,continue
が使える
while文
i = 1 |
if文
if 条件1 |
- または
||
,かつ&&
で短絡評価 ! 条件
で真偽値反転
switch文
switch x |
関数
定義
関数定義にはfunction
コマンドを使う.
function y = myplus(x) |
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) |
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変数に代入すると、固有値の列ベクトルを返す |
階数
rank(mat) |
連立一次方程式を解く
Ax = bの形式を解くには,
x = A \ b |
参考文献
線形代数学と統計学の基礎的な内容をOctaveによって確認しながら進めるテキストです.
- 戸田, 山田 (2007)「計量経済学の基礎」東京大学出版会.