まずは画面の表示モードを変更します。デフォルトでは more off なので、 出力が多いと画面情報へ流れていってしまいます。 more on としておけば 1画面分の結果が表示されたところで画面がいったん止まります。 1行進ませるにはリターンキー、1画面分進めるにはスペースキーを押します。 途中で終えるには q と入力してください >> more on >> more off コマンドを調べるには help を使います。 help とすれば使えるコマンドが 分類されて表示されます。分類 general に属するコマンドが知りたければ help general, more コマンドについて知りたければ more help のように入力します。 >> help For more help on directory/topic, type "help topic". >> help ops 演算子と特殊キャラクタ 数値演算子 plus - 加算 + uplus - 単項加算 + minus - 減算 - uminus - 単項減算 - mtimes - 行列の乗算 * times - 配列の乗算 .* mpower - 行列のベキ乗 ^ power - 配列のベキ乗 .^ mldivide - バックスラッシュ、行列の左除算 \ 以下、省略。 メニューバーからヘルプ (H) を起動してチュートリアルをみることもできます。 >> demo demo と入力すれば MATLAB のデモが見られます MATLAB が扱うのは実数(正確には倍精度浮動小数点数)です。整数も内部では 実数として扱われています。数値の内部表現をみるには >> pi ans = 3.1416 >> format long >> pi ans = 3.14159265358979 long は 15 桁表示です。標準に戻すには format と入力します。 数、ベクトル、行列の入力は以下のようにします。 b=0; のように行末にセミコロン ; をつけると結果は表示されません。 ベクトル・行列を入力する際はかぎかっこ [ ] を使います。 ベクトルや行列など、次の行のデータを入力する場合はセミコロン ; で区切ります。 = の左辺がない場合は、 ans という変数に格納されます。 転置を作るには ' ダッシュを利用します。 >> a=1 a = 1 >> b=2; >> A=[1 -1 0 0; -1 2 -1 0; 0 -1 2 -1; 0 0 -1 1.1] A = 1.0000 -1.0000 0 0 -1.0000 2.0000 -1.0000 0 0 -1.0000 2.0000 -1.0000 0 0 -1.0000 1.1000 LU 分解を用いて連立1次方程式 A x = b の解を求めるには、以下のようにします。 >> b = [ -2; 4; -4; 2.1 ] b = -2.0000 4.0000 -4.0000 2.1000 >> x=A\b x = -1.0000 1.0000 -1.0000 1.0000 条件数、ノルムの計算には、関数 norm, cond, eig を使います: >> norm(A,1) ans = 4 >> norm(A,2) ans = 3.4218 >> cond(A,2) ans = 149.2780 >> cond(A,1) ans = 184.0000 MATLAB のプログラムは xxx.m という M-ファイルに一連の手続きを記述します。 % から始まる行はコメントで、あとは MATLAB のコマンドをならべるだけです。 下の例では、 A0, R, b を受け取って、反復法を実行する LEQ という関数の定義です。 while を除けば、これまでの説明で十分に理解できる内容のはずです。 xxx.m の内容: function LEQ(A0,R,b) % Solves Linear Equations by Stationary Iterative Method % H. Hasegawa; May 19, 2006 s=size(A0); x = rand(s(1),1); k= 0; res= 1; while ( res > 1.0e-8) y = A0\(R*x+b); k = k+1; res = norm(y-x,2); x = y; out = [k res]; disp(sprintf('%5d %20.8e',out)) end x これを実行するには、MATLAB のウインドウで Current Directory を変更し、 コマンドウィンドウに LEQ(A0,R,b) と入力します。 what で M-ファイルの一覧、help LEQ で LEQ 関数のコメント部分 ( % から始まる行)が表示されます。 どのような変数が作られているかの一覧を調べるには who, whos コマンド、 それらの変数の内容をみるには変数名を入力します。 >> A0=[ 1 0 0 0; 0 2 0 0; 0 0 2 0; 0 0 0 2] A0 = 1 0 0 0 0 2 0 0 0 0 2 0 0 0 0 2 >> R=A0-A; >> LEQ(A0,R,b) 1 2.60843061e+000 2 2.23826612e+000 3 2.10138665e+000 中略 1006 1.01665179e-008 1007 1.00312625e-008 1008 9.89780639e-009 x = -0.99999961572770 1.00000037915994 -0.99999963604112 1.00000033907360 >> eig(inv(A0)*R) ans = -0.90244107895598 -0.23404854350955 0.98669599008469 0.59979363238085
2006年05月19日