【C言語】2×2の逆行列を作成する

目次から探す

逆行列の求め方

C言語を使って逆行列を求める方法を解説します。

逆行列は、行列の掛け算における「逆元」のようなもので、ある行列Aとその逆行列A^-1を掛けると単位行列Iが得られます。

ここでは、2×2の行列に限定して逆行列を求める方法を見ていきましょう。

行列の定義

まずは行列を定義する方法から始めます。

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

以下に2×2の行列を定義するサンプルコードを示します。

#include <stdio.h>
int main(void) {
    double matrix[2][2] = {
        {4, 7},
        {2, 6}
    };
    printf("行列は以下の通りです。\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%f ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

このコードを実行すると、以下のような出力が得られます。

行列は以下の通りです。
4.000000 7.000000 
2.000000 6.000000

2×2の逆行列を求める

次に、この行列の逆行列を求めてみましょう。

以下の2×2の行列があった場合は、このようになります。

a b
c d
d/(ad-bc) -b/(ad-bc)
-c/(ad-bc)  a/(ad-bc)

これをC言語で実装すると以下のようになります。

#include <stdio.h>
int main(void) {
    double matrix[2][2] = {
        {4, 7},
        {2, 6}
    };
    double determinant = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    double inverse[2][2] = {
        { matrix[1][1] / determinant, -matrix[0][1] / determinant},
        {-matrix[1][0] / determinant,  matrix[0][0] / determinant}
    };
    printf("逆行列は以下の通りです。\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%f ", inverse[i][j]);
        }
        printf("\n");
    }
    return 0;
}

このコードを実行すると、以下のような出力が得られます。

逆行列は以下の通りです。
0.600000 -0.700000 
-0.200000 0.400000

これが2×2の行列の逆行列を求める方法です。

行列のサイズが大きくなると計算が複雑になりますが、基本的な考え方は同じです。

目次から探す