【C言語】行列の計算方法【数学】

【C言語】行列の計算方法【数学】

行列の基本

行列は、数学やプログラミングにおいて重要なデータ構造であり、数値計算や画像処理、機械学習など幅広い分野で利用されます。C言語では、行列は通常、二次元配列(または動的配列)として表現されます。

例えば、3×3の行列は以下のように定義できます。


#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

行列の加算

行列の加算は、同じサイズの2つの行列を要素ごとに加算する操作です。C言語では、二重ループを使って簡単に実装できます。


#include <stdio.h>

#define SIZE 3

void add_matrices(int A[SIZE][SIZE], int B[SIZE][SIZE], int result[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            result[i][j] = A[i][j] + B[i][j];
        }
    }
}

void print_matrix(int matrix[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int A[SIZE][SIZE] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int B[SIZE][SIZE] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
    int result[SIZE][SIZE];

    add_matrices(A, B, result);

    printf("行列の加算結果:\n");
    print_matrix(result);
    return 0;
}

行列の乗算

行列の乗算は、2つの行列を掛け合わせ、新しい行列を生成する演算です。行列A (m×n) と行列B (n×p) の積は (m×p) の行列Cになります。


#include <stdio.h>

#define SIZE 3

void multiply_matrices(int A[SIZE][SIZE], int B[SIZE][SIZE], int result[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            result[i][j] = 0;
            for (int k = 0; k < SIZE; k++) {
                result[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}

行列の転置

行列の転置とは、行と列を入れ替える操作のことです。転置行列 \( A^T \) は、元の行列の要素を入れ替えて作成されます。


void transpose_matrix(int A[SIZE][SIZE], int result[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            result[j][i] = A[i][j];
        }
    }
}

掃き出し法(ガウスの消去法)

ガウスの消去法(掃き出し法)は、連立方程式を解くためのアルゴリズムです。行列の階段形を作ることで、解を求めます。


void gaussian_elimination(double A[SIZE][SIZE+1]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = i + 1; j < SIZE; j++) {
            double factor = A[j][i] / A[i][i];
            for (int k = i; k < SIZE + 1; k++) {
                A[j][k] -= factor * A[i][k];
            }
        }
    }
}

LU分解

LU分解は、行列を下三角行列Lと上三角行列Uの積に分解する方法です。ガウスの消去法を発展させた手法で、連立方程式の解法にも使われます。

まとめ

本記事では、C言語を用いた行列の基本操作(加算、乗算、転置、掃き出し法、LU分解)を解説しました。行列計算は数値計算や機械学習など多くの分野で利用されるため、効率的な実装を学ぶことが重要です。

コメントは受け付けていません。