C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】行優先と列優先の行列を加算してできる行列のトレースを求める方法

このチュートリアルでは、行優先(row-major)と列優先(column-major)の2つの行列を加算して得られる行列のトレース(対角成分の総和)を求めるC++プログラムを作成します。

行優先行列と列優先行列の作り方

まず、行列の次数が与えられたとき、それぞれの行列がどのように構成されるのかを確認しましょう。

次数: 3 × 3

行優先行列:

123
456
789

列優先行列:

147
258
369

2つの行列が用意できたら、それらを要素ごとに加算します。そして、その結果として得られる行列のトレースこそが、私たちが求める答えです。

解決の手順

問題を解くために、次の4つのステップを実行します。

  1. 行優先行列を作成する
  2. 列優先行列を作成する
  3. 両方の行列を加算し、結果の行列を保存する
  4. 結果の行列のトレースを求めて出力する

サンプルコード

それでは、実際のコードを見てみましょう。

#include <iostream>
using namespace std;

int traceOfRowAndColumnMajorMatrices(int m, int n) {
    int row_major[m][n], column_major[m][n], addition_result[m][n];
    int count = 1;

    // ステップ1: 行優先行列の作成
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            row_major[i][j] = count++;
        }
    }

    // ステップ2: 列優先行列の作成
    count = 1;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            column_major[j][i] = count++;
        }
    }

    // ステップ3: 両方の行列を加算
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            addition_result[i][j] = row_major[i][j] + column_major[i][j];
        }
    }

    // ステップ4: トレースの計算
    int trace = 0;
    for (int i = 0; i < m; i++) {
        trace += addition_result[i][i];
    }

    return trace;
}

int main() {
    int m = 3, n = 3;
    cout << traceOfRowAndColumnMajorMatrices(m, n) << endl;
    return 0;
}

出力

上記のプログラムを実行すると、次の結果が得られます。

30

補足: 結果が「30」になる理由

列優先行列は、行優先行列の転置行列と同一です。転置しても対角成分の値は変化しないため、2つの行列の和のトレースは、元の行列のトレースのちょうど2倍になります。この例では、行優先行列の対角成分は 1 + 5 + 9 = 15 となるため、その2倍である 30 が答えになります。

まとめ

今回は、行優先・列優先の2つの行列を加算し、その結果の行列からトレースを求める方法を解説しました。本チュートリアルについて質問がある場合は、コメント欄でお気軽にお知らせください。

  1. C++でべき等行列を判定するプログラムの作成方法

    行数を r、列数を c とする行列 M[r][c] が与えられ、r = c となる正方行列を考えます。この記事では、与えられた正方行列がべき等行列(アイデンポテント行列)であるかどうかを判定するC++プログラムを解説します。 べき等行列とは 行列 M がべき等行列であるとは、行列 M と自分自身の積が元の行列 M と等しくなること、すなわち M × M = M が成り立つことを指します。 例えば、次の行列を見てください。 この行列を自分自身で掛け合わせても、結果は元の行列とまったく同じになります。したがって、この行列はべき等行列であると言えます。 べき等行列の代表的な例としては、ベクトルを

  2. C++で行列の転置を求めるプログラムの書き方【サンプルコード付き解説】

    行列とは、数値を行と列の形式に整理して並べた長方形の配列のことです。そして「転置行列」とは、元の行列の行を列に、列を行に入れ替えて作られる新しい行列を指します。転置行列のイメージ例として、次のような3×3の行列を見てみましょう。1 2 3 4 5 6 7 8 9この行列を転置すると、次のようになります。1 4 7 2 5 8 3 6 9元の行列の1行目(1, 2, 3)が、転置後には1列目になっていることが分かります。このように、元の行列の要素 a[i][j] は、転置後には a[j][i] の位置へ移動します。C++による転置行列を求めるプログラム以下が、C++で行列の転置を求めるプログラム