【C++入門】2つの行列を乗算するプログラムの書き方を解説
この記事では、C++を使って2つの行列を乗算するプログラムについて詳しく解説します。
ここでの目標は、与えられた2つの行列の積を計算し、その結果を出力することです。なお、行列の乗算が成立するためには、1つ目の行列の列数が2つ目の行列の行数と一致している必要があります。これは行列の乗算における基本的な条件なので、必ず押さえておきましょう。
行列の乗算の仕組み
行列の積における各要素は、1つ目の行列の「行」と2つ目の行列の「列」に含まれる対応する要素同士を順番に掛け合わせ、それらをすべて足し合わせることで求められます。
今回のサンプルコードでは、4×4の正方行列を扱い、三重のforループを用いてこの計算を実装します。
サンプルコード
#include <iostream>
using namespace std;
#define N 4
// 両方の行列の要素を掛け合わせる関数
void calc_product(int mat1[][N], int mat2[][N], int res[][N]){
int i, j, k;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++){
res[i][j] = 0;
for (k = 0; k < N; k++)
res[i][j] += mat1[i][k] * mat2[k][j];
}
}
}
int main(){
int i, j;
int res[N][N];
int mat1[N][N] = {{1, 1, 1, 1},
{2, 2, 2, 2},
{3, 3, 3, 3},
{4, 4, 4, 4}};
int mat2[N][N] = {{1, 1, 1, 1},
{2, 2, 2, 2},
{3, 3, 3, 3},
{4, 4, 4, 4}};
calc_product(mat1, mat2, res);
cout << "Resultant matrix :\n";
for (i = 0; i < N; i++){
for (j = 0; j < N; j++)
cout << res[i][j] << " ";
cout << "\n";
}
return 0;
}実行結果
Resultant matrix : 10 10 10 10 20 20 20 20 30 30 30 30 40 40 40 40
コードの解説
calc_product関数では、外側の2つのループによって結果を格納する行列resの各要素の位置(i行j列)を指定し、最も内側のループでmat1のi行目の要素とmat2のj列目の要素を順に掛け合わせながら合計を求めています。
まずres[i][j]を0で初期化してから加算していくことで、正しい積の値が蓄積されていきます。このアルゴリズムの計算量はO(N³)となるため、行列のサイズが大きくなると処理時間が増大する点には注意が必要です。
-
C#で2つの行列を加算するプログラムの作成方法
C#では、2次元配列を使うことで行列を簡単に扱うことができます。この記事では、ユーザーが入力した2つの3×3行列を読み込み、対応する要素同士を足し合わせた結果を出力するプログラムを解説します。 まず、入力用の行列2つと、計算結果を格納するための配列1つ、合計3つの2次元配列を宣言します。 int[] arr1 = new int[20, 20]; int[] arr2 = new int[20, 20]; int[] arr3 = new int[20, 20]; 今回は3×3の正方行列(合計9要素)を扱うため、行数・列数を表す変数 n に 3 を設定します。ユーザーからの入力は Consol
-
Pythonで2つの行列を乗算する方法を徹底解説
この記事では、次の問題に対する解決策を詳しく解説します。 問題文: 2つの行列が与えられたとき、それらを乗算し、その結果を出力します。 2つの行列の乗算が成立するためには、1つ目の行列の列数が2つ目の行列の行数と一致している必要があります。この条件が満たされている場合にのみ、乗算の計算を実行できます。 例えば、Aが m×n の行列、Bが n×p の行列であるとき、積 A×B は m×p の行列になります。それでは、具体的な実装方法を見ていきましょう。 アプローチ1:総当たり(ブルートフォース)法 最も基本的な方法は、三重のforループを使って各要素を順番に計算する方法です。外側のループで行を