まずは画面の表示モードを変更します。デフォルトでは 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日