【C言語】2つの行列を掛け算する方法

この記事では、C言語を使って2つの行列を掛け算する方法をわかりやすく解説します。

行列の表現方法や要素へのアクセス方法から始め、行列の入力方法や掛け算の関数の作成、そして実際の行列の掛け算の実行例までを紹介します。

初心者の方でも理解しやすいように、具体的なサンプルコードも含めて解説します。

目次から探す

行列の表現方法

行列は、数値の2次元配列を使って表現することができます。

C言語では、2次元配列を使って行列を表現する方法が一般的です。

2次元配列を使った行列の表現方法

2次元配列を使って行列を表現するには、以下のように配列を宣言します。

int matrix[行の数][列の数];

たとえば、3行3列の行列を表現する場合は、以下のように宣言します。

int matrix[3][3];

このように宣言することで、3行3列の行列を表現するための2次元配列が作成されます。

行列の要素へのアクセス方法

2次元配列を使った行列では、行と列のインデックスを指定して要素にアクセスすることができます。

たとえば、以下のような行列があるとします。

1 2 3
4 5 6
7 8 9

この行列の要素にアクセスするには、以下のようにインデックスを指定します。

matrix[行のインデックス][列のインデックス]

たとえば、行列の中央の要素である5にアクセスする場合は、以下のようになります。

matrix[1][1]

このようにして、2次元配列を使った行列の要素にアクセスすることができます。

※ 2次元配列を使った行列の表現方法と要素へのアクセス方法を理解することは、行列の掛け算を実装する際に重要な基礎知識となります。

行列の掛け算の実装例

行列の掛け算を実装する方法について説明します。

行列の掛け算は、2つの行列を掛け合わせて新しい行列を作る操作です。

以下では、行列の入力方法、行列の掛け算の関数の作成、そして実際の行列の掛け算の実行例について解説します。

行列の入力方法

まず、行列の入力方法について説明します。

C言語では、2次元配列を使って行列を表現します。

以下のような形式で行列を入力します。

int matrix1[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
int matrix2[3][3] = {
    {9, 8, 7},
    {6, 5, 4},
    {3, 2, 1}
};

上記の例では、3×3の行列を2つ定義しています。

各要素は中括弧 {} で囲まれ、カンマ , で区切られています。

行列の要素は整数型であることを示すため、int というキーワードが使用されています。

行列の掛け算の関数の作成

次に、行列の掛け算の関数を作成します。

以下のような関数を定義することで、2つの行列を掛け合わせた結果を新しい行列として返すことができます。

void matrixMultiplication(int matrix1[][3], int matrix2[][3], int result[][3]) {
    int i, j, k;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            result[i][j] = 0;
            for (k = 0; k < 3; k++) {
                result[i][j] += matrix1[i][k] * matrix2[k][j];
            }
        }
    }
}

上記の関数では、3重のループを使用して行列の掛け算を行っています。

ij の2つのループは、結果行列の各要素を計算するために使用されます。

k のループは、行列の要素同士の掛け算と足し算を行うために使用されます。

実際の行列の掛け算の実行例

最後に、実際に行列の掛け算を実行する例を示します。

以下のように、先ほど定義した行列と結果を格納するための行列を用意し、先ほど作成した関数を呼び出すことで行列の掛け算を行います。

int main() {
    int matrix1[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    int matrix2[3][3] = {
        {9, 8, 7},
        {6, 5, 4},
        {3, 2, 1}
    };
    int result[3][3];
    matrixMultiplication(matrix1, matrix2, result);
    // 結果の表示
    int i, j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}

上記の例では、matrixMultiplication 関数を呼び出して行列の掛け算を行い、結果を result 行列に格納しています。

その後、結果を表示するために2重のループを使用して result 行列の要素を表示しています。

以上が、C言語で2つの行列を掛け算する方法の実装例です。

行列の入力方法、行列の掛け算の関数の作成、そして実際の行列の掛け算の実行例について解説しました。

目次から探す