数値処理入門(長谷川 秀彦)

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