ノート (67 ページ)

MATLAB version 4 では ``The Ultimate Technical Computing Environment'' とサブタイトルがつけられていたのだが,MATLAB version 5 では ``The Langage of Technical Computing'' と変更された.
このことからもわかるように,MATLAB version 5 ではデータ構造や言語機能,そしてプログラミング開発環境の整備が図られている.
具体的には,MATLAB ワークスペースブラウザや GUI ベースの M-ファイルエディタとデバッガ(PC と Mac のみ),プログラムの実行におけるボトルネックを検出する M-ファイル実行速度プロファイラ,アルゴリズムの隠蔽するための P-Code(Psudo-Code)などが追加されている.
その他,多次元配列,M-ファイルの機能拡張,新しい常微分方程式ソルバー(stiff な ODE のサポート),不規則にサンプリングされたデータの解析(空間に等間隔に分布していないデータでも表示したり解析したりできる)などの拡充も見逃せない.
詳しくは,

Matlab Using Matlab version 5, The Math Works Inc.,
Natick, MA 01760, 1996
を参照せよ.

このノートでは,特に新しい常微分方程式ソルバー

non-stiff system solvers
ode113, ode23, ode45
stiff system solvers
ode15s, ode23s

について述べる.
これらは,基本的には既に MathWorks 社の FTP サーバで提供されていた.
1 段階の陽的解法であった ode23, ode45 に多段階法の

ode113
可変次数の予測子・修正子法


が加わった.
一般に,ある種の陰的公式,とりわけ後退微分公式が陽的公式に比べて格段にパーフォーマンスがよい微分方程式をスティッフ (stiff) であるというが,スティッフな微分方程式を解くためのソルバー

ode15s
後退微分公式も使える可変次数ソルバー
ode23s
2 次の改良型ローゼンブロック

などが加わった.

これらのソルバーを使う構文上の主な変更箇所は,微分方程式系を定義する関数 M-ファイルにおいて微分方程式系を列ベクトルとして与えることと,ソルバーを使う構文で数値解を求める区間(下の例では tspan)を行ベクトルとして与えることである.
たとえば,57 ページで述べた van der Pol 方程式を表現する関数 M-ファイルは

function xprime = vdpol(t,x)
xprime = [x(2); x(2).*(1-x(1).^2)-x(1)];

となり,ode23 を使うスクリプトは

t0 = 0; tf = 20; tspan = [t0,tf];
x0 = [0 0.25]';
[t,x] = ode23('vdpol',tspan,x0);

となる.
初期値 x0 は列ベクトルでも行ベクトルでもよいが,微分方程式系が列ベクトルで与えられることになったため,初期値も列ベクトルで与えるほうがよい.
また,58 ページで述べた Lorenz 方程式を表現する関数 M-ファイルは

function udot = loreq(t,u)
global S R B
udot = [-S*u(1) + S*u(2);
R*u(1) - u(2) - u(1)*u(3);
-B*u(3) + u(1)*u(2)];

となり,ode45 を使うスクリプトは

global S R B; S = 10; R = 28; B = 8/3;
[t,u] = ode45('loreq',[0,30],[1,2,3]');
N = find(t>1); v = u(N,:); plot3(v(:,1),v(:,2),v(:,3)); grid on
p = 0.01; comet3(v(:,1),v(:,2),v(:,3), p)

となる.