【C言語】任意の大きさ(n×m)の行列の積を計算する方法

この記事では、C言語を使用して任意の大きさの行列の積を計算する方法について解説します。

行列の積の定義や計算方法をわかりやすく説明し、具体的なサンプルコードを示します。

初心者の方でも理解しやすいように、手順を明確に説明していますので、ぜひ参考にしてください。

目次から探す

任意の大きさの行列の積の計算方法

行列の積を計算する方法について解説します。

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

C言語を使用して、任意の大きさの行列の積を計算する方法を紹介します。

行列の積の定義

行列の積を計算するためには、2つの行列の要素を掛け合わせて足し合わせる必要があります。

行列Aのi行j列の要素をaij、行列Bのj行k列の要素をbjkとすると、行列Cのi行k列の要素cikは以下のように計算されます。

cik = a1j * bjk + a2j * bjk + … + anj * bjk

この計算を全てのiとkに対して行うことで、行列Cの全ての要素を求めることができます。

行列の積を計算するアルゴリズムの概要

行列の積を計算するアルゴリズムは以下の手順で行います。

  1. 2つの行列AとBのサイズを確認し、積が計算可能かどうかを判断します。

行列Aの列数と行列Bの行数が一致している必要があります。

  1. 行列Cを作成し、要素を0で初期化します。

行列Cのサイズは行列Aの行数と行列Bの列数となります。

  1. 行列Aの各行と行列Bの各列の要素を掛け合わせて足し合わせ、その結果を行列Cの対応する要素に格納します。
  2. 全ての要素の計算が終わったら、行列Cを出力します。

以下に、具体的なC言語のサンプルコードを示します。

#include <stdio.h>
#define MAX_SIZE 10
void matrixMultiplication(int A[][MAX_SIZE], int B[][MAX_SIZE], int C[][MAX_SIZE], int rowsA, int colsA, int colsB) {
    int i, j, k;
    for (i = 0; i < rowsA; i++) {
        for (j = 0; j < colsB; j++) {
            C[i][j] = 0;
            for (k = 0; k < colsA; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}
void printMatrix(int matrix[][MAX_SIZE], int rows, int cols) {
    int i, j;
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}
int main() {
    int A[MAX_SIZE][MAX_SIZE] = {{1, 2}, {3, 4}};
    int B[MAX_SIZE][MAX_SIZE] = {{5, 6}, {7, 8}};
    int C[MAX_SIZE][MAX_SIZE];
    int rowsA = 2, colsA = 2, colsB = 2;
    matrixMultiplication(A, B, C, rowsA, colsA, colsB);
    printMatrix(C, rowsA, colsB);
    return 0;
}

このサンプルコードでは、2つの2×2の行列AとBの積を計算しています。

行列Cには計算結果が格納され、printMatrix関数を使用して結果を表示しています。

※ 行列のサイズや要素の値は適宜変更してください。

また、行列のサイズが大きくなる場合は、MAX_SIZEの値を適切に変更してください。

目次から探す