Octave を使う - Octave 入門
三好 明
三好 明
GNU Octave は John W. Eaton らによって開発された 科学技術計算用の高級プログラミング言語 (フリーウェア) です. この解説は 2018 年 3 月 現在の Octave 4.2.2 に基づいています. 改良やアップデートによって最新のバージョンと異なる場合がありますが, その場合はご容赦下さい.
公式サイト に各種 OS (GNU/Linux. macOS, BSD, Windows)
用の入手方法・インストール方法がまとめられています.
公式マニュアル
を参照して下さい. ここ 10 年ほどの間にユーザも増えてきて web
検索で答えが見つかることも多くなっています.
octave↵
と入力することで起動します.
GNU Octave, version 4.2.2 Copyright (C) 2018 John W. Eaton and others. : >>
>> ) で
exit↵ または
quit↵ と入力することで Octave
は終了します. 下線 は入力部分, "↵"
は [Enter] キーを表します.
>> exit↵
>> 2.3 * exp(-0.23 * 2)↵ ans = 1.4520
format long↵ と入力します.
output_precision(12)↵
のように有効桁数を指定することもできます.
>> 5 * ans↵ ans = 7.2598 >> format long↵ >> ans↵ ans = 7.25976192332965 >> output_precision(12)↵ >> ans↵ ans = 7.25976192333
>> x = 0:0.01:2;↵ >> plot (x, sin(pi*x));↵
mysource.m を Octave を実行しているカレントディレクトリに作成して下さい.
x = 1:10 sum(x)
>> mysource↵
x =
1 2 3 4 5 6 7 8 9 10
ans = 55
>> source mysource.m↵
edit
関数でテキストエディターを起動することができます.
>> edit mysource.m↵
~/.octave_hist (WSL を含む Linux) あるいは
C:\Users\ユーザ名\.octave_hist (Windows)
に格納されています.
";" を,
行内の列区切りに空白 " " または
カンマ "," を用い, 角括弧
[ ] でくくって表現します.
以下の例では, 連立一次方程式 Ax = b
を解いています.
>> A = [2, 1; 1, 3]↵ A = 2 1 1 3 >> b = [3; 4]↵ b = 3 4 >> x = A \ b↵ x = 1.00000 1.00000
inv()
関数や転置行列を表す後置演算子 '
などを用いて様々な線形演算を行うことができます.
>> inv(A)↵ ans = 0.60000 -0.20000 -0.20000 0.40000 >> b'↵ ans = 3 4 >> b' * b↵ ans = 25 >> det(A)↵ ans = 5.0000
lambda の
対角要素として大きい順に格納されており, 固有ベクトルは行列
vec に縦ベクトルとして固有値の順に格納されています。
>> A = [-1, 1; 1, -1]↵ A = -1 1 1 -1 >> [vec, lambda] = eig(A)↵ vec = 0.70711 0.70711 -0.70711 0.70711 lambda = Diagonal Matrix -2 0 0 0
f
として定義します.
>> function xdot = f(x, t)↵ xdot(1) = -5 * x(1);↵ xdot(2) = 5 * x(1) - 1 * x(2);↵ xdot(3) = 1 * x(2);↵ endfunction↵
x0 と出力時間 t
を設定します.
linspace は一定間隔の数値の並び (横ベクトル) を生成する関数です.
>> x0 = [1; 0; 0];↵ >> t = linspace(0, 3, 31)';↵
lsode を呼び出して数値解を計算します.
>> xout = lsode("f", x0, t);↵
t
を追加して出力します.
format は出力書式を設定する関数です.
[t, xout] は縦ベクトル t と同じ行数の行列
xout を連結した行列です.
>> format short;↵
>> [t, xout]↵
ans =
0.00000 1.00000 0.00000 0.00000
0.10000 0.60653 0.37288 0.02059
: : : :
3.00000 0.00000 0.06223 0.93777
>> plot(t, xout)↵

f を定義します.
>> function y = f(x)↵ > y = 1e13 * x^(-1.39) * exp(-17921/x) - 1;↵ > endfunction↵
fsolve
を呼び出して解を得ます.
>> [x, fval, info] = fsolve("f", 800)↵
x = 873.34
fval = 9.4820e-007
info = 1
>> gray_scott↵カレントディレクトリが, どこだかわからない場合は
pwd↵ と入力してみて下さい.
>> pwd↵ ans = C:\Users\myaccount