MaTX4からMaTX5への移行について

ここでは,バージョン4とバージョン5のMaTXをそれぞれMaTX4とMaTX5で表す。

o変更内容

MaTX4からMaTX5への移行に伴い,変更された内容を以下に示す。

  1. ブロック行列のブロック成分の操作に用いる指数は,MaTX4では 0 から始まる が,MaTX5では 1 から始まる。これは,通常の行列の成分の操作とブロック行 列のブロック成分の操作を統一するための変更である。

    行列 A = [[1 2][3 4]] を対角成分にもつ 4 x 4 の行列の記述例を以下に示す。

    (MaTX4)
        A = [[1 2][3 4]];
        AA = Z(2,2,A);
        AA(0,0,A) = A;
        AA(1,1,A) = A;
        print AA;
    
        === [AA] : (  4,  4) ===
                 (  1)           (  2)           (  3)           (  4)     
        (  1)  1.00000000E+00  2.00000000E+00  0.00000000E+00  0.00000000E+00
        (  2)  3.00000000E+00  4.00000000E+00  0.00000000E+00  0.00000000E+00
        (  3)  0.00000000E+00  0.00000000E+00  1.00000000E+00  2.00000000E+00
        (  4)  0.00000000E+00  0.00000000E+00  3.00000000E+00  4.00000000E+00
    

    (MaTX5)
        A = [[1 2][3 4]];
        AA = Z(2,2,A);
        AA(1,1,A) = A;
        AA(2,2,A) = A;
        print AA;
    
        === [AA] : (  4,  4) ===
                 (  1)           (  2)           (  3)           (  4)     
        (  1)  1.00000000E+00  2.00000000E+00  0.00000000E+00  0.00000000E+00
        (  2)  3.00000000E+00  4.00000000E+00  0.00000000E+00  0.00000000E+00
        (  3)  0.00000000E+00  0.00000000E+00  1.00000000E+00  2.00000000E+00
        (  4)  0.00000000E+00  0.00000000E+00  3.00000000E+00  4.00000000E+00
    

    MaTX4では,多項式の変数は $ を用い

        x = $;
    
    のように定義するが,MaTX5では,多項式の変数を選び,

        x = Polynomial("x");
    

    のように定義する。この変数を使って多項式を記述すると,以下のように変数 名が x となる。

        p = x^2 + 3*x + 4
        p = x^2 + 3 x + 4
    

    また,多項式の変数の変換も

        Polynomial(p,"abc")
        p = abc^2 + 3 abc + 4
    

    のようにできる。ただし,内部データは 1 変数の多項式のままなので,異な る変数の多項式を加えても多変数の多項式にはならない。

  2. 多項式の係数を変換関数 Matrix() でベクトルに変換すると,MaTX4では係数 が昇べきの順にベクトルの成分になるが,MaTX5では降べきの順に成分になる。 これは,多項式を表示した際の係数の順番とベクトルを表示した際の成分の順 番を同じにするためである。以下に,多項式とベクトルを変換する例を示す。

    (MaTX4)
        s = Polynomial("s");
        p = s^3 + 2*s^2 + 3*s + 4;
        Matrix(p);
    
        === [ans] : (  1,  4) ===
                   (  1)           (  2)           (  3)           (  4)     
        (  1)  4.00000000E+00  3.00000000E+00  2.00000000E+00  1.00000000E+00
    

    (MaTX5)
        s = Polynomial("s");
        p = s^3 + 2*s^2 + 3*s + 4;
        Matrix(p);
    
        === [ans] : (  1,  4) ===
                   (  1)           (  2)           (  3)           (  4)     
        (  1)  1.00000000E+00  2.00000000E+00  3.00000000E+00  4.00000000E+00
    

    MaTX5での,多項式 p = x^2 + 3*x + 4 を記述する例を以下に示す。

    1. 多項式変数を用いる方法
          Polynomial x, p;
      
          x = Polynomial("x");
          p = x^2 + 3*x + 4;
      
    2. ベクトルを多項式に変換する方法
          Matrix v;
          Polynomial p;
      
          v = [1 3 4];
          p = Polynomial(v);
      
    3. 多項式の係数を設定する方法
          Polynomial p;
      
          p = Polynomail(Z(1,3));
          p(0) = 4; 
          p(1) = 3;
          p(2) = 1;
      

o移行に役立つヒント

MaTX4からMaTX5への移行に利用できるヒントを示す。

  1. MaTX4として公開されているプログラムを -v5 オプションを付けて起動すると, MaTX5として動作する。
  2. MaTX5として公開されているプログラムを -v4 オプションを付けて起動すると, MaTX4として動作する。
  3. 関数 version() は現在の動作モード(バージョン)を返す。この関数を使えば, 両方のバージョンで動作するプログラムを記述できる。例えば,
        if (version() == 4) {
            AA(0,0,A) = [[1 2][3 4]];
        } else {
            AA(1,1,A) = [[1 2][3 4]];
        }
    
    のように記述すれば,両方のバージョンで動作する。
  4. 関数 version() で,動的に動作モード(バージョン)を変更できる。すなわち,
        version(4);
    
    を実行すると,それ以降はMaTX4として動作し,
        version(5);
    
    を実行すると,それ以降はMaTX5として動作する。したがって,プログラム中 のある区間を希望するバージョンで動作させるこができ,関数 main() の先頭 で,どちらかのバージョンに設定すれば,プログラム全体をそのバーョンで動 作させることができる。
  5. matx と matc を -checkblock オプションを付けて実行すると,プログラム中 でブロック行列が使用されている箇所を全て報告する。また, -checkpoly オ プションを付けると,多項式の係数とベクトルを変換する箇所を報告する。
  6. MaTX/inputsの下のMM-ファイルは,どちらのバージョンでも動作する。

oMaTX4からMaTX5への移行の手順

MaTX4のユーザがMaTX5に移行する手順例を次に示す。

  1. -checkblock オプションで変更に関係する部分があるか調べる。もしあれば, -v4 オプションを付けてMaTX5を起動する。
  2. 変更に関係する箇所があれば,その部分を
        version(4);
    
    関係する部分(MaTX4用の部分)
        version(5);
    
    のように関数で version() 囲み,-v4 オプションを使用しない。
  3. 時間を見つけて,該当箇所をMaTX5用に変更する。