Octaveの使い方、基本事項

[投稿日] 2017年1月16日
[最終更新] 2017年2月21日

すぐに忘れてしまうので、Octaveの基本についてメモ。グラフの描き方については「Octaveで反比例の二次元グラフを描画 – 或る阿呆の記」。

スポンサーリンク

基本

  • 基本は行ベクトル。x = [1 2 3]のように、半角スペースまたはカンマ(,)で区切る
  • セミコロン(;)で区切ると列ベクトルになる\[
    [1,2,3; 4,5,6; 7,8,9] = \left(
    \begin{array}{ccc}
    1 & 2 & 3 \\
    4 & 5 & 6 \\
    7 & 8 & 9
    \end{array}
    \right)
    \]
  • 転置はアポストロフィ(‘)
    • よって、aとbの内積は、a*b’と表現する
      • 内積…\( (a,b) = a_1b_1 + a_2b_2 \)
  • 連続した値のベクトルは、init:endまたはinit:inc:end。以上、以下。
    • 1:5 -> 1 2 3 4 5
    • 1:2:5 -> 1 3 5
  • x(m)で、m番目の成分。つまり1スタート。また数え方は列方向
    • x = [1 2 3]のとき、x(2) = 2
    • x = [1 2 3; 4 5 6; 7 8 9]のとき、x(2)=4
  • 式末尾にセミコロン(;)をつけると、標準出力に出力されない。
  • スカラー演算は*や/に.をつける(つけないとベクトル演算)
  • スクリプトは.m
    • コメントアウトは#または%

制御構文

条件分岐など。ある程度他言語が使える人向け。

if文

if〜elseif〜else〜endifのように記述します。

if (条件)
  文
elseif (条件2)
  文
else
  文
endif

条件式で使う論理記号は<,<=,>,>=,==,~=です。≠が~=なところが注意でしょうか。

switch文

swtich〜case〜otherwise〜endswitchです。

switch 評価式
  case 定数1
    文
  case 定数2
    文
  otherwise
    文
endswitch

break的なものは必要ありません。

for文

繰り返しのfor文。C風でもないし、bash風でもないし、なんだか独特です。

for 変数 = 式
  繰り返し文
endfor

たとえばfor i = 1:5とすると、i=1からi=5まで代入した形で繰り返し文が実行されます。breakでループを抜けます。continueで、次の繰り返しに行きます。

while文, do until文

while (条件式)
  繰り返し文
endwhile

条件式が真の間、繰り返します。

do〜until文で、条件判定を繰り返し後にすることができます。

do
  繰り返し文
until (条件式)

do〜whileではないです。

while、do untilでもbreak、continueが使えます。

特殊な行列

単位行列など、特殊な行列には関数が用意されています。

単位行列…eye(n)

eye(n)とすることで、単位行列を生成できます。

\[
eye(3) = \left(
\begin{array}{ccc}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{array}
\right)
\]

ゼロ行列…zeros(n), zeros(m,n)

zeros(n)で\(n*n\)のゼロ行列、zeros(m,n)で、\(m*n\)のゼロ行列が生成されます。

\[
zeros(3) = \left(
\begin{array}{ccc}
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0
\end{array}
\right)
\]

\[
zeros(1,3) = \left(
\begin{array}{ccc}
0 & 0 & 0
\end{array}
\right)
\]

対角行列…diag([v]), diag([v],k)

diag([v])で対角行列、diag([v],k)でkだけシフトした対角行列が生成されます。

\[
diag([1,4,9]) = \left(
\begin{array}{ccc}
1 & 0 & 0 \\
0 & 4 & 0 \\
0 & 0 & 9
\end{array}
\right)
\]

\[
diag([1,4,9],2) = \left(
\begin{array}{ccccc}
0 & 0 & 1 & 0 & 0 \\
0 & 0 & 0 & 4 & 0 \\
0 & 0 & 0 & 0 & 9
\end{array}
\right)
\]

乱数行列…randn(n), randn(m,n)

randn(n)で、\(n*n\)の乱数行列、randn(m,n)で\(m*n\)の乱数行列が生成されます。

Macにおけるグラフの描画について

Mac版でグラフを描画するには、X11またはAquaを使うのがたいていであるようですが、Homebrewでインストールする場合、コンパイル時にオプションをつけねばならず一手間かかります。なので、個人的には、出力にはqtを利用しています。こちらのほうが綺麗です。そのための設定は、~/.gnuplotに以下を記述。

set term qt

また、~/.octavercに以下を記述。

setenv GNUTERM 'qt'

以上。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。