目次から探す
逆行列の求め方
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の行列の逆行列を求める方法です。
行列のサイズが大きくなると計算が複雑になりますが、基本的な考え方は同じです。