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

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

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

解説

以下に,追加する部分のコードを示します。それぞれの行列の判定基準を満たすようにロジックが組まれていることを確認してください。

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

ソースコード:Sample isSquareMatrix.java 完成版

/*
 * isSquareMatrix
 * 目的:引数に与えた行列を表す配列が,正方行列かどうか判定する。
 *     行数と一行に入っている要素数が等しいか確認する。

 * 引数: m[][] 判定する行列を表す整数型の二次元配列
 * 戻り値: boolean 正方行列なら真
 */
  static boolean isSquareMatrix(int m[][]){
    int row = m.length; //行数取得
    int cul = m[0].length; //一行目の要素数(列数)の取得
    boolean result = true;
    if (row == cul) {
      for (int i = 0 ; i < row ; ++i ){
        if (cul == m[i].length){
          //列数は妥当である。
        } else {
          //列数が妥当ではない。
          result = false;
          break;
        }
      }
    } else {
      result = false;
    }
    return result;
  }

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

ソースコード:Sample isDiagonalMatrix.java完成版

/*
 * isDiagonalMatrix
 * 目的:引数に与えた行列を表す配列が,対角行列かどうか判定する。
 * 引数: m[][] 判定する行列を表す整数型の二次元配列
 * 戻り値: boolean 対角行列なら真
 */
  static boolean isDiagonalMatrix(int m[][]){
    boolean result = true;
    if ( isSquareMatrix(m) ) { // 先ず正方行列であること
      int row = m.length; //行数取得
      int cul = m[0].length; //一行目の要素数(列数)の取得
      for (int i = 0 ; i < row ; ++i ){
        for (int j = 0 ; j < cul ; ++j ){
          if ( ( i == j ) && ( m[i][j] != 0 ) ) {
            //対角成分が0 ではないので妥当である。
          } else if ( ( i != j ) && ( m[i][j] == 0 ) ) {
            //対角成分以外が零なので妥当である。
          } else {
            //以上どれにも当てはまらない場合には妥当ではない。
            result = false;
            break;
          }
        }
        //妥当でない場合が発覚したら,ループ終了。
        if ( result == false ) break;
      }
    } else {
      result = false;
    }
    return result;
  }

今回はここまで

次回学習する逆行列,そして行列式をクリアすれば,行列を用いて方程式を解くために必要な道具を全て手に入れたことになります。あと少し,頑張ってください。

今回のまとめ

  • 正方行列とは行数と列数の等しい行列で,特殊な場合として対角行列,単位行列があります。
  • 行列の行と列を交換したものを転置行列といい,特殊な場合として対称行列,交代行列があります。

著者プロフィール

平田敦(ひらたあつし)

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