next up previous
Next: データの保存 Up: シミュレーションに必要なコマンド Previous: シミュレーションに必要なコマンド

インタープリタ(matx)による演算

MaTXのコマンドを試すのに一番簡単な方法は,matxによる実行でしょう. シェルから,``matx''と入力してみてください.(``>''はプロンプトで す.) 次のようにして,matxが起動します.


> matx

        MaTX Interpreter (matx)
        Linux version 4.369
        last modified Sat Dec 20 18:01:31 JST 1997
        Copyright (C) Masanobu Koga 1989-1997 All rights reserved.

        Send bugs and comments to matx@ds.mei.titech.ac.jp
        Type 'quit' to exit, 'help' for functions, 'demo' for demonstration.

 MaTX (1)



まずは,整数と実数の計算です.m,n,x,yに数値を代入して計算させます.

\begin{displaymath}
m = 2,\hspace*{1zw}n=3,\hspace*{1zw}
 x = 2.0,\hspace*{1zw}y=3.0,\hspace*{1zw}\end{displaymath}

\begin{displaymath}
m^2,\hspace*{1zw}x^{-1},\hspace*{1zw}
 m+n,\hspace*{1zw} x+y...
 ...ace*{1zw}
 x+n,\hspace*{1zw}
,\hspace*{1zw}x/y,\hspace*{1zw}n/m\end{displaymath}




 MaTX (1) m = 2
m = 2
 MaTX (2) n = 3
n = 3
 MaTX (3) x = 2.0
x = 2
 MaTX (4) y = 3.0
y = 3
 MaTX (5) print m^2, x~, m+n, x+y, x/y, m/n
ans = 4
ans = 0.5
ans = 5
ans = 5
ans = 0.66666667
ans = 0
 MaTX (6)



計算結果の違いに注意してください. MaTXでは,整数型(Integer)と実数型(Real)を区別しますので, Integerのn+mはIntegerの5になり, Realのx+yはRealの5.0になります. RealとIntegerの和のx+nnがRealに直されて計算され,5.0になります. 同じ理由で,Realのx/yは0.66666667になり, Integerのn/mはになります. 注意しましょう.

次に組み込み関数を使って,つぎの計算をさせます.

\begin{displaymath}
sin(\pi/4.0),\hspace*{1zw}tan^{-1}(1.0),\hspace*{1zw}e^{1.0}\end{displaymath}

(''PI''は$\pi$を意味します.)


 MaTX (6) print sin(PI/4.0), atan(1.0), exp(1.0)
ans = 0.70710678
ans = 0.78539816
ans = 2.7182818
 MaTX (7)



それでは行列計算をしてみましょう([1, 第15章]).

\begin{displaymath}
A =
\left[
\begin{array}
{cc}
1 & -1 \\ \end{array}\right]
,...
 ... A B =
\left[
\begin{array}
{cc}
-10 & 20 \\ \end{array}\right]\end{displaymath}



 MaTX (7) A = [1,-1]
 === [A] : (  1,  2) ===
            (  1)           (  2)     
 (  1)  1.00000000E+00 -1.00000000E+00
 MaTX (8) B = [[1,-1][2,-3]]
 === [B] : (  2,  2) ===
            (  1)           (  2)     
 (  1)  1.00000000E+00 -1.00000000E+00
 (  2)  2.00000000E+00 -3.00000000E+00
 MaTX (9) k = 10.0
k = 10
 MaTX (10) C = k * A * B
 === [C] : (  1,  2) ===
            (  1)           (  2)     
 (  1) -1.00000000E+01  2.00000000E+01
 MaTX (11)



Aの転置,Bの逆行列:

\begin{displaymath}
A^T =
\left[
\begin{array}
{r}
1 \\ -1 \\ \end{array}\right]...
 ...
\left[
\begin{array}
{rr}
3 & -1\\ 2 & -1\\ \end{array}\right]\end{displaymath}

これらの計算は次のようになります.


 MaTX (11) A'
 === [ans] : (  2,  1) ===
            (  1)     
 (  1)  1.00000000E+00
 (  2) -1.00000000E+00
 MaTX (12) B~
 === [ans] : (  2,  2) ===
            (  1)           (  2)     
 (  1)  3.00000000E+00 -1.00000000E+00
 (  2)  2.00000000E+00 -1.00000000E+00
 MaTX (13)



行列を成分とする行列:

\begin{displaymath}
D =
\left[
\begin{array}
{c}
A \\  \hline
C \\ \end{array}\r...
 ... & -1 & 1 & -1 & 1\\ -10 & 20 & 2 & 3 & -1\\ \end{array}\right]\end{displaymath}

これらも,次のように簡単に記述することが出来ます


 MaTX (14) D = [[A][C]]
 === [D] : (  2,  2) ===
            (  1)           (  2)     
 (  1)  1.00000000E+00 -1.00000000E+00
 (  2) -1.00000000E+01  2.00000000E+01
 MaTX (15) F = [D,B,A']
 === [F] : (  2,  5) ===
            (  1)           (  2)           (  3)           (  4)     
 (  1)  1.00000000E+00 -1.00000000E+00  1.00000000E+00 -1.00000000E+00
 (  2) -1.00000000E+01  2.00000000E+01  2.00000000E+00 -3.00000000E+00
            (  5)     
 (  1)  1.00000000E+00
 (  2) -1.00000000E+00
 MaTX (16)



(行列の大きさと組み合わせ方に注意しましょう).

逆に,FからD,B,Aを復元することもできます. (DFの1-2行目,1-2列目等に注意してください.)

\begin{displaymath}
\left[
\begin{array}
{c\vert c\vert c}
D & B & A^T\\ \end{ar...
 ... & -1 & 1 & -1 & 1\\ -10 & 20 & 2 & 3 & -1\\ \end{array}\right]\end{displaymath}




 MaTX (16) D = F(1:2,1:2) 
 === [D] : (  2,  2) ===
            (  1)           (  2)     
 (  1)  1.00000000E+00 -1.00000000E+00
 (  2) -1.00000000E+01  2.00000000E+01
 MaTX (17) B = F(1:2,3:4)
 === [B] : (  2,  2) ===
            (  1)           (  2)     
 (  1)  1.00000000E+00 -1.00000000E+00
 (  2)  2.00000000E+00 -3.00000000E+00
 MaTX (18) AT = F(1:2,5)  
 === [AT] : (  2,  1) ===
            (  1)     
 (  1)  1.00000000E+00
 (  2) -1.00000000E+00
 MaTX (19)



下記のような特殊な行列も簡単に記述できます.

\begin{displaymath}
G =
\left[
\begin{array}
{rrr}
0 & 0 & 0 \\ 0 & 0 & 0 \\ \en...
 ...{rrr}
2 & 0 & 0 \\ 0 & 3 & 0 \\ 0 & 0 & 4 \\ \end{array}\right]\end{displaymath}

G$2\times 3$の零行列,H$3\times 3$の単位行列, Jは対角行列)


 MaTX (19) G = Z(2,3)
 === [G] : (  2,  3) ===
            (  1)           (  2)           (  3)     
 (  1)  0.00000000E+00  0.00000000E+00  0.00000000E+00
 (  2)  0.00000000E+00  0.00000000E+00  0.00000000E+00
 MaTX (20) H = I(3)
 === [H] : (  3,  3) ===
            (  1)           (  2)           (  3)     
 (  1)  1.00000000E+00  0.00000000E+00  0.00000000E+00
 (  2)  0.00000000E+00  1.00000000E+00  0.00000000E+00
 (  3)  0.00000000E+00  0.00000000E+00  1.00000000E+00
 MaTX (21) J = diag(2,3,4)
 === [J] : (  3,  3) ===
            (  1)           (  2)           (  3)     
 (  1)  2.00000000E+00  0.00000000E+00  0.00000000E+00
 (  2)  0.00000000E+00  3.00000000E+00  0.00000000E+00
 (  3)  0.00000000E+00  0.00000000E+00  4.00000000E+00
 MaTX (22)



\begin{displaymath}
K =
\left[
\begin{array}
{rrrrr}
1 & 2 & 3 & 4 & 5\\ \end{ar...
 ...
{rrrrr}
-2.0 & -1.5 & \cdots & 2.5 & 3.0 \\ \end{array}\right]\end{displaymath}

(等差行列)


 MaTX (33) K = [1:5]      
 === [K] : (  1,  5) ===
            (  1)           (  2)           (  3)           (  4)     
 (  1)  1.00000000E+00  2.00000000E+00  3.00000000E+00  4.00000000E+00
            (  5)     
 (  1)  5.00000000E+00
 MaTX (34) L = [-2:0.5:3]
 === [L] : (  1, 11) ===
            (  1)           (  2)           (  3)           (  4)     
 (  1) -2.00000000E+00 -1.50000000E+00 -1.00000000E+00 -5.00000000E-01
            (  5)           (  6)           (  7)           (  8)     
 (  1)  0.00000000E+00  5.00000000E-01  1.00000000E+00  1.50000000E+00
            (  9)           ( 10)           ( 11)     
 (  1)  2.00000000E+00  2.50000000E+00  3.00000000E+00
 MaTX (35)





Kenichiro Nonaka
5/15/1998