【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分解)を解説しました。行列計算は数値計算や機械学習など多くの分野で利用されるため、効率的な実装を学ぶことが重要です。