【C言語】3×3行列の扱い方

この記事では、C言語を使って3×3行列の扱い方について解説します。

行列の定義や初期化方法から、加算、減算、乗算、転置といった行列の基本的な演算まで、具体的なサンプルコードを交えてわかりやすく説明します。

初心者の方でも理解しやすいように解説していきますので、ぜひ最後までお読みください。

目次から探す

3×3行列の定義と初期化

行列の定義

行列は、数値の2次元配列として表現されます。

3×3行列は、3行3列の正方行列であり、以下のように表されます。

int matrix[3][3];

上記のコードでは、matrixという名前の3×3行列を定義しています。

各要素は整数型であり、行列の要素にはインデックスを使ってアクセスすることができます。

行列の初期化

行列を初期化するには、各要素に適切な値を代入する必要があります。

以下のように、要素ごとに値を代入することができます。

matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
matrix[2][0] = 7;
matrix[2][1] = 8;
matrix[2][2] = 9;

上記のコードでは、1から9までの値を行列の各要素に代入しています。

このように行列を初期化することで、後の演算などで正しい結果を得ることができます。

※ 行列の要素には、他の変数や式の結果を代入することもできます。

また、行列の要素は任意のデータ型で定義することができますが、一般的には数値型が使用されます。

行列の演算

行列の演算には、加算、減算、乗算、転置の4つの基本的な操作があります。

それぞれの操作について詳しく解説します。

行列の加算

行列の加算は、同じ位置にある要素同士を足し合わせる操作です。

2つの3×3行列を加算する場合、対応する要素同士を足し合わせて新しい行列を作ります。

以下にサンプルコードを示します。

#include <stdio.h>
void matrixAddition(int matrix1[3][3], int matrix2[3][3], int result[3][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            result[i][j] = matrix1[i][j] + matrix2[i][j];
        }
    }
}
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];
    matrixAddition(matrix1, matrix2, result);
    printf("行列の加算結果:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}
行列の加算結果:
10 10 10
10 10 10
10 10 10

行列の減算

行列の減算も加算と同様に、同じ位置にある要素同士を引き合わせる操作です。

2つの3×3行列を減算する場合、対応する要素同士を引き合わせて新しい行列を作ります。

以下にサンプルコードを示します。

#include <stdio.h>
void matrixSubtraction(int matrix1[3][3], int matrix2[3][3], int result[3][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            result[i][j] = matrix1[i][j] - matrix2[i][j];
        }
    }
}
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];
    matrixSubtraction(matrix1, matrix2, result);
    printf("行列の減算結果:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}
行列の減算結果:
-8 -6 -4
-2 0 2
4 6 8

行列の乗算

行列の乗算は、行列同士の要素の積を計算して新しい行列を作る操作です。

行列の乗算には、左側の行列の列数と右側の行列の行数が一致している必要があります。

以下にサンプルコードを示します。

#include <stdio.h>
void matrixMultiplication(int matrix1[3][3], int matrix2[3][3], int result[3][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            result[i][j] = 0;
            for (int k = 0; k < 3; k++) {
                result[i][j] += matrix1[i][k] * matrix2[k][j];
            }
        }
    }
}
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);
    printf("行列の乗算結果:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}
行列の乗算結果:
30 24 18
84 69 54
138 114 90

行列の転置

行列の転置は、行と列を入れ替える操作です。

3×3行列の場合、対角線を軸に要素を入れ替えます。

以下にサンプルコードを示します。

#include <stdio.h>
void matrixTranspose(int matrix[3][3], int result[3][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            result[i][j] = matrix[j][i];
        }
    }
}
int main() {
    int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int result[3][3];
    matrixTranspose(matrix, result);
    printf("行列の転置結果:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}
行列の転置結果:
1 4 7
2 5 8
3 6 9

以上が、行列の加算、減算、乗算、転置の基本的な操作についての解説とサンプルコードです。

これらの操作を使って、3×3行列を効果的に扱うことができます。

目次から探す