ホーム‎ > ‎

Octave入門

はじめに


MathLibreにおさめられているOctaveを使ってみる.

Octaveは無償であるだけでなく,やさしく始められるにもかかわらず相当に強力で,学ぶ価値がある(と思う).

ちょっとした計算やグラフ表示をたやすくできる手段を手中にしておくと,労力が省けるばかりでなく,発想の幅も広がる.
標語としては

簡単なことは簡単に,むずかしいこともなんとかできる

を目指したい.

自分で手を動かす部分は
このように囲まれている
ので,全て自分で操作して結果を確かめること.実行例をいろいろアレンジして何が起きるかを探るとなおよい.

オンラインのドキュメンテーション
http://www.gnu.org/software/octave/doc/interpreter/index.html
を参照すること.
日本語のマニュアルもあり、MathLibreで検索せよ.

起動

次のいずれかの方法でOctaveを起動する.QtOctaveというのはOctaveに対するグラフィカルインターフェイスだが,今のところそれほどうれしいことはない.
ターミナルを開き,"octave"と入力してリターン.
メイン・メニュー(左下)->Math->QtOctave
以下ではOctaveのプロンプトを">"で表す.QtOctaveを使う場合は、"Command Line>>" と書いてあるところの隣にある窓に入力する.

終了

ソフトウェアの起動の仕方を学んだら,次に行うべきことは終了の仕方を学ぶことである.
 > quit
または
 > exit
のいずれでもよい.

変数

直感的に浮動小数点数を扱うことができる.
 > a = 1.1
 > b = 3.2
 > a + b
 > a - b
 > a + b
 > a / b
 > a^b

大きな数,小さな数の表記

 > big = 3.14e34
 > small = 1.73e-10
 > big * small

特別な変数

 > pi
 > i
 > j
 > i * j
(問)なぜjがある?
 > eps
 > realmax
 > realmin
(問)これらはそれぞれ何を表すか?
 > 1 + 2
 > ans + 3

比較

真/偽は1/0で表される.
 > a = 2.20
 > b = 3.2
 > a == b
 > a == a
 > a ~= b
 > a ~= a
 > a > b
 > a < b
 > a >= b
 > a >= a
 > b <= b
 > a > b & a < b
 > a < b | a > b

ベクトルと行列

これがOctave(やMATLABやScilabやYorickの)最大のウリである.
ぜひ活用してほしい.

行ベクトルと列ベクトル

 > u = [1 2 3]
 > v = [1; 2; 3]
列ベクトルはセミコロンでなく改行で区切って入力してもよい.
このほうが少し楽かも.
 > vv = [1
 2
 3]
要素の値が等差数列をなす行ベクトルは特別な生成法が用意されている.
 > aaa = 1:10
 > bbb = 1:0.5:5
これはループを制御するときにも使われる.

要素による参照

 > u = [1 2 3]
 > u(3)
要素をベクトルで指定することもできる.
 > u(2:3)
 > u([1 3])
まとめて代入することもできる.
 > u(2:3) = [-2 -3]
 > u([1 3]) = [2 6]
最後の要素は"end"で参照される.
 > u(end)
 > u(2:end)

行列

 > A = [1 2 1; -2 0 1]
または
 > AA = [1 2 1
 -2 0 1]

(共役)転置行列

 > A'
 > [1 i; -i 1]'
もちろん行列も要素の指定ができる.
 > A(2,1)
 > A(2,1) = 3
 > A(1,1:2)
 > A(1,1:2) = [-1 -2]
 > A(1:2,1) = [-1 -2]
(問)最後のは何をしたことになっているだろうか?左辺で与えられている要素をそれぞれ変更するようにするには?

行列から行ベクトル,列ベクトル,小行列を取り出すには
 > A(1,:)
 > A(:,2)
 > A(2,:) = [0 1 2]
 > A(1:2, 1:2)
逆に,結合する方法
 > A = [1 2; -2 1]
 > B = [0 -1; 2 1]
 > x = [-2; -3]
 > C = [A x]
 > D = [A -B; B A]

余談

このように行列の添字の一部をコロンを用いて表現する方法はいろいろと便利なのでほかの場面でももっと使ってもよいかもしれない。
参照:新井仁之、『線形代数 基礎と応用』(日本評論社、2006)

ベクトル,行列の演算

ほぼ直感的にできる.
 > A = [1 2; -2 1]
 > B = [0 -1; 2 1]
 > A + B
 > A * B
 > A^2
 > det(A)
 > rank(A)
ベクトルもOK.
 > x = [-2; -3]
 > A * x
 > x' * A
 > x * x'
 > x' * x

ベクトル・行列の比較

要素毎に行われ,結果はベクトル・行列になる.
これをうまく使うことがスマートに処理を行うために必要である.
 > x = [1; -2; -3]
 > x == -2
 > x > 0
 > A = [1 2; -2 1]
 > B = [0 -1; 2 1]
 > A == B
 > A < B
 > A ~= B
ベクトルの要素の和,平均値,最大,最小もある.
 > sum(x)
 > sum(x < 0)
(問)何を求めていることになる?
 > mean(B)
(問)どの方向に計算している?

ベクトルとスカラーの演算

 > [1 2 3] + 1
 > [1 2 3] * 2

特別な行列

 > zeros(2)
 > zeros(2,3)
 > ones(3)
 > eye(3)
 > diag([1 2 3])
 > rand(2)

逆行列,連立一次方程式

(問)次の一次方程式系を解け.
(齋藤正彦『線型代数入門』p.70)
   x      +  z + 2w = 6
 -2x +  y + 4z +  w = 3
  4x - 3y - 4z +  w = -3
  -x +  y + 2z +  w = 4
(問)3x3行列A, Pが次のように与えられたとする.
 A = [-1 -5 -1; 2 4 0; -4 -8 0], P = [1 3 2; -1 -2 -1; 2 4 3]
この時,
 P^-1 * A * P
を求めよ.(同上,p. 71)

一休み

この次は「Octave入門補足」にすすんでください.

このページの課題の一部は

櫻井鉄也,『MATLAB/Scilabで理解する 数値計算』(東京大学出版会)

の第1章から引用させていただきました.