はじめMath! Javaでコンピュータ数学

第42回 行列の数学 正方行列

この記事を読むのに必要な時間:およそ 4 分

問題 以下に示す関数を作りましょう。

(1) 与えられた行列が正方行列かどうか判定する関数。

(2) 与えられた行列が対角行列かどうか判定する関数。

以下にそれぞれの問題に取り組むためのソースコードを掲載します。不足するコードを補って完成させましょう。ソースはテストの形をとっており,目的の動作をしなければその旨を表示しますが,正常に実行されれば何も起こりません※7⁠。

ソースコード:Sample isSquareMatrix.java

//サンプルコード
//引数に与えた行列が正方行列か判定する関数。配列版。
//filename : Sample_isSquareMatrix.java

class Sample_isSquareMatrix {

  public static void main(String[] args) {

    int a[][] = //行列A 3x3
      { { 3, 4, 5 },
        { 6, 7, 8 },
        { 9,10,11 } };
    int b[][] = //行列B 3x2
      { { 9,10 },
        { 11,12 },
        { 13,14 } };
    int c[][] = //行列C 4x2
      { { 9,10 },
        { 11,12 },
        { 13,14 },
        { 15,16 } };
    //正方行列でしょうか?
    System.out.println("Test Start");
    test_isSquareMatrix(a,"a",true);
    test_isSquareMatrix(a,"a’",false);
    test_isSquareMatrix(b,"b",false);
    test_isSquareMatrix(c,"c",false);
    System.out.println("Test Done");
  }// end of main

/*
 * test_isSquareMatrix
 * 目的: isSquareMatrix メソッドのテスト
 * 引数: m[][] 判定する行列
 *      valName 引数に渡した行列の変数名
 *      RoH(Result of Hope) 期待される結果
 */
  static boolean test_isSquareMatrix(int m[][],String valName,boolean RoH){
    if (isSquareMatrix(m) == RoH) {
      return true;
    } else {
      System.out.println(valName + "のテストは目的の結果になりませんでした。");
      return false;
    }
  }


/*
 * isSquareMatrix
 * 目的:引数に与えた行列を表す配列が,正方行列かどうか判定する。
 *     行数と一行に入っている要素数が等しいか確認する。
 * 引数: m[][] 判定する行列を表す整数型の二次元配列
 * 戻り値: boolean 正方行列なら真
 */
  static boolean isSquareMatrix(int m[][]){

// ここから 目的のコードを加えましょう。
//
// ここまで

  }

}// end of class Sample_isSquareMatrix

ソースコード:Sample isDiagonalMatrix.java

//サンプルコード
//引数に与えた行列が対角行列か判定する関数。配列版。
//filename : Sample_isDiagonalMatrix.java

class Sample_isDiagonalMatrix {

  public static void main(String[] args) {

    int a[][] = //行列A 3x3
      { { 3, 4, 5 },
        { 6, 7, 8 },
        { 9,10,11 } };
    int b[][] = //行列B 3x2
      { { 9,10 },
        { 11,12 },
        { 13,14 } };
    int c[][] = //行列C 4x2
      { { 9,10 },
        { 11,12 },
        { 13,14 },
        { 15,16 } };
    int d[][] = //行列C 3x3 の対角行列
      { { 1, 0, 0 },
        { 0, 2, 0 },
        { 0, 0, 3 } };
    int zero[][] = //行列Zero 3x3 の零行列
      { { 0, 0, 0 },
        { 0, 0, 0 },
        { 0, 0, 0 } };

    //対角行列でしょうか?
    System.out.println("Test Start");
    test_isDiagonalMatrix(a,"a",false);
    test_isDiagonalMatrix(b,"b",false);
    test_isDiagonalMatrix(c,"c",false);
    test_isDiagonalMatrix(d,"d",true);
    test_isDiagonalMatrix(d,"d’",false);
    test_isDiagonalMatrix(zero,"zero",false);
    System.out.println("Test Done");

  }// end of main


/*
 * test_isDiagonalMatrix
 * 目的: isSquareMatrix メソッドのテスト
 */
  static boolean test_isDiagonalMatrix(int m[][],String valName,boolean RoH){
    if (isDiagonalMatrix(m) == RoH) {
      return true;
    } else {
      System.out.println(valName + "のテストは目的の結果になりませんでした。");
      return false;
    }
  }


/*
 * isSquareMatrix
 * 目的:引数に与えた行列を表す配列が,正方行列かどうか判定する。
 *     行数と一行に入っている要素数が等しいか確認する。
 * 引数: m[][] 判定する行列を表す整数型の二次元配列
 * 戻り値: boolean 正方行列なら真
 */
  static boolean isSquareMatrix(int m[][]){
  //このメソッドは前問(1) の結果を利用してください。
  //対角行列の確認には,正方行列かどうかのチェックも必要です。
  }


/*
 * isDiagonalMatrix
 * 目的:引数に与えた行列を表す配列が,対角行列かどうか判定する。
 * 引数: m[][] 判定する行列を表す整数型の二次元配列
 * 戻り値: boolean 対角行列なら真
 */
  static boolean isDiagonalMatrix(int m[][]){

// ここから 目的のコードを加えましょう。
//
// ここまで

  }

}// end of class Sample_isDiagonalMatrix
※7)
正方行列の場合の変数a,対角行列の場合の変数dについては,望まれる結果として正 しくない場合のコード(a⁠⁠,d⁠のテスト)が含まれています。本来,正しくない場合は 必要ないのですが,テストコードが正常に働くかどうかの確認でこうしました。テスト コードが正常に動いていることを確認したら,削除するべきものです。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。2010年のLotYはRuby。結城浩氏のような仕事をしたいと妄想する30代後半♂。