Octave を使う - Octave 入門
三好 明
三好 明
GNU Octave は John W. Eaton らによって開発された 科学技術計算用の高級プログラミング言語 (フリーウェア) です. この解説は 2018 年 3 月 現在の Octave 4.2.2 に基づいています. 改良やアップデートによって最新のバージョンと異なる場合がありますが, その場合はご容赦下さい.
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