#include <stdio.h>
#include <math.h>
#define SIZE 4
// ガウスの消去法で行列式を計算する関数
double calculate_determinant(double lambda) {
// 画像の行列 A - λI をセット
// ※ A[1][1] の位置は「-5.0 - lambda」になります
double mat[SIZE][SIZE] = {
{1.0 - lambda, 2.0, 3.0, 5.0},
{3.0, -5.0 - lambda, 1.0, 4.0},
{5.0, 9.0, 2.0 - lambda, -6.0},
{1.0, 7.0, 4.0, 1.0 - lambda}
};
double det = 1.0;
for (int i = 0; i < SIZE; i++) {
// ピボットが0に近い場合の処理(簡易的な部分ピボット選択)
if (fabs(mat
[i
][i
]) < 1e-9) { int swap_row = -1;
for (int k = i + 1; k < SIZE; k++) {
if (fabs(mat
[k
][i
]) > 1e-9) { swap_row = k;
break;
}
}
if (swap_row == -1) return 0.0; // 行列式は0
// 行の入れ替え
for (int j = 0; j < SIZE; j++) {
double temp = mat[i][j];
mat[i][j] = mat[swap_row][j];
mat[swap_row][j] = temp;
}
det *= -1.0; // 行を入れ替えたので符号を反転
}
// 下三角成分を消去
for (int k = i + 1; k < SIZE; k++) {
double factor = mat[k][i] / mat[i][i];
for (int j = i; j < SIZE; j++) {
mat[k][j] -= factor * mat[i][j];
}
}
// 対角成分を掛け合わせる
det *= mat[i][i];
}
return det;
}
int main() {
printf("=== 特性方程式 det(A - λI) の係数確認用チェック ===\n");
// 特定の λ を代入して、多項式が 0 になるか(=固有値か)をテスト
// あなたがべき乗法で見つけた「8.6120894541」をテストします
double test_lambda = 8.6120894541;
double result = calculate_determinant(test_lambda);
printf("λ = %.10f のときの行列式の値: %e\n", test_lambda
, result
);
if (fabs(result
) < 1e-4) { printf("-> 行列式がほぼ0になったため、この値は間違いなく正しい固有値(根)です。\n"); } else {
printf("-> 0になりません。方程式か固有値のどちらかがズレています。\n"); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIFNJWkUgNAoKLy8g44Ks44Km44K544Gu5raI5Y675rOV44Gn6KGM5YiX5byP44KS6KiI566X44GZ44KL6Zai5pWwCmRvdWJsZSBjYWxjdWxhdGVfZGV0ZXJtaW5hbnQoZG91YmxlIGxhbWJkYSkgewogICAgLy8g55S75YOP44Gu6KGM5YiXIEEgLSDOu0kg44KS44K744OD44OICiAgICAvLyDigLsgQVsxXVsxXSDjga7kvY3nva7jga/jgIwtNS4wIC0gbGFtYmRh44CN44Gr44Gq44KK44G+44GZCiAgICBkb3VibGUgbWF0W1NJWkVdW1NJWkVdID0gewogICAgICAgIHsxLjAgLSBsYW1iZGEsICAyLjAsICAgICAgICAgICAzLjAsICAgICAgICAgICA1LjB9LAogICAgICAgIHszLjAsICAgICAgICAgIC01LjAgLSBsYW1iZGEsICAxLjAsICAgICAgICAgICA0LjB9LAogICAgICAgIHs1LjAsICAgICAgICAgICA5LjAsICAgICAgICAgICAyLjAgLSBsYW1iZGEsIC02LjB9LAogICAgICAgIHsxLjAsICAgICAgICAgICA3LjAsICAgICAgICAgICA0LjAsICAgICAgICAgICAxLjAgLSBsYW1iZGF9CiAgICB9OwoKICAgIGRvdWJsZSBkZXQgPSAxLjA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspIHsKICAgICAgICAvLyDjg5Tjg5zjg4Pjg4jjgYww44Gr6L+R44GE5aC05ZCI44Gu5Yem55CG77yI57Ch5piT55qE44Gq6YOo5YiG44OU44Oc44OD44OI6YG45oqe77yJCiAgICAgICAgaWYgKGZhYnMobWF0W2ldW2ldKSA8IDFlLTkpIHsKICAgICAgICAgICAgaW50IHN3YXBfcm93ID0gLTE7CiAgICAgICAgICAgIGZvciAoaW50IGsgPSBpICsgMTsgayA8IFNJWkU7IGsrKykgewogICAgICAgICAgICAgICAgaWYgKGZhYnMobWF0W2tdW2ldKSA+IDFlLTkpIHsKICAgICAgICAgICAgICAgICAgICBzd2FwX3JvdyA9IGs7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN3YXBfcm93ID09IC0xKSByZXR1cm4gMC4wOyAvLyDooYzliJflvI/jga8wCgogICAgICAgICAgICAvLyDooYzjga7lhaXjgozmm7/jgYgKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTSVpFOyBqKyspIHsKICAgICAgICAgICAgICAgIGRvdWJsZSB0ZW1wID0gbWF0W2ldW2pdOwogICAgICAgICAgICAgICAgbWF0W2ldW2pdID0gbWF0W3N3YXBfcm93XVtqXTsKICAgICAgICAgICAgICAgIG1hdFtzd2FwX3Jvd11bal0gPSB0ZW1wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRldCAqPSAtMS4wOyAvLyDooYzjgpLlhaXjgozmm7/jgYjjgZ/jga7jgafnrKblj7fjgpLlj43ou6IKICAgICAgICB9CgogICAgICAgIC8vIOS4i+S4ieinkuaIkOWIhuOCkua2iOWOuwogICAgICAgIGZvciAoaW50IGsgPSBpICsgMTsgayA8IFNJWkU7IGsrKykgewogICAgICAgICAgICBkb3VibGUgZmFjdG9yID0gbWF0W2tdW2ldIC8gbWF0W2ldW2ldOwogICAgICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8IFNJWkU7IGorKykgewogICAgICAgICAgICAgICAgbWF0W2tdW2pdIC09IGZhY3RvciAqIG1hdFtpXVtqXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyDlr77op5LmiJDliIbjgpLmjpvjgZHlkIjjgo/jgZvjgosKICAgICAgICBkZXQgKj0gbWF0W2ldW2ldOwogICAgfQoKICAgIHJldHVybiBkZXQ7Cn0KCmludCBtYWluKCkgewogICAgcHJpbnRmKCI9PT0g54m55oCn5pa556iL5byPIGRldChBIC0gzrtJKSDjga7kv4LmlbDnorroqo3nlKjjg4Hjgqfjg4Pjgq8gPT09XG4iKTsKICAgIAogICAgLy8g54m55a6a44GuIM67IOOCkuS7o+WFpeOBl+OBpuOAgeWkmumgheW8j+OBjCAwIOOBq+OBquOCi+OBi++8iO+8neWbuuacieWApOOBi++8ieOCkuODhuOCueODiAogICAgLy8g44GC44Gq44Gf44GM44G544GN5LmX5rOV44Gn6KaL44Gk44GR44Gf44CMOC42MTIwODk0NTQx44CN44KS44OG44K544OI44GX44G+44GZCiAgICBkb3VibGUgdGVzdF9sYW1iZGEgPSA4LjYxMjA4OTQ1NDE7CiAgICBkb3VibGUgcmVzdWx0ID0gY2FsY3VsYXRlX2RldGVybWluYW50KHRlc3RfbGFtYmRhKTsKCiAgICBwcmludGYoIs67ID0gJS4xMGYg44Gu44Go44GN44Gu6KGM5YiX5byP44Gu5YCkOiAlZVxuIiwgdGVzdF9sYW1iZGEsIHJlc3VsdCk7CiAgICAKICAgIGlmIChmYWJzKHJlc3VsdCkgPCAxZS00KSB7CiAgICAgICAgcHJpbnRmKCItPiDooYzliJflvI/jgYzjgbvjgbww44Gr44Gq44Gj44Gf44Gf44KB44CB44GT44Gu5YCk44Gv6ZaT6YGV44GE44Gq44GP5q2j44GX44GE5Zu65pyJ5YCk77yI5qC577yJ44Gn44GZ44CCXG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCItPiAw44Gr44Gq44KK44G+44Gb44KT44CC5pa556iL5byP44GL5Zu65pyJ5YCk44Gu44Gp44Gh44KJ44GL44GM44K644Os44Gm44GE44G+44GZ44CCXG4iKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==