#include <stdio.h>
#include <math.h>
#define EPSILON 1e-7
#define MAX_ITER 100
// 【確定】あなたが得た2つ目の行列の正しい特性方程式 f(λ)
double f(double lambda) {
return pow(lambda
, 4) - 2.0 * pow(lambda
, 3) - 43.0 * pow(lambda
, 2) - 36.0 * lambda
+ 130.0; }
// 【確定】正しい導関数 f'(λ)
double df(double lambda) {
return 4.0 * pow(lambda
, 3) - 6.0 * pow(lambda
, 2) - 86.0 * lambda
- 36.0; }
void solve_newton(int attempt, double lambda0) {
double lambda = lambda0;
int iter = 0;
while (iter <= MAX_ITER) {
double f_val = f(lambda);
double df_val = df(lambda);
if (fabs(df_val
) < 1e-12) { return;
}
double delta = f_val / df_val;
lambda -= delta;
iter++;
// 移動距離で判定
if (fabs(delta
) < EPSILON
) { printf("試行 #%d (初期値 %5.1f) -> 収束成功 (%2d回) | 固有値解 λ = %.10f\n", attempt, lambda0, iter, lambda);
return;
}
}
}
int main() {
// この新しい特性方程式の4つの谷に綺麗に落ちるように調整した初期値
double initial_lambda[] = {10.0, 2.0, -2.5, -6.0};
printf("=== 【2つ目の行列】ニュートン・ラフソン法 探索結果 ===\n"); for (int i = 0; i < 4; i++) {
solve_newton(i + 1, initial_lambda[i]);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEVQU0lMT04gMWUtNyAgIAojZGVmaW5lIE1BWF9JVEVSIDEwMAoKLy8g44CQ56K65a6a44CR44GC44Gq44Gf44GM5b6X44GfMuOBpOebruOBruihjOWIl+OBruato+OBl+OBhOeJueaAp+aWueeoi+W8jyBmKM67KQpkb3VibGUgZihkb3VibGUgbGFtYmRhKSB7CiAgICByZXR1cm4gcG93KGxhbWJkYSwgNCkgLSAyLjAgKiBwb3cobGFtYmRhLCAzKSAtIDQzLjAgKiBwb3cobGFtYmRhLCAyKSAtIDM2LjAgKiBsYW1iZGEgKyAxMzAuMDsKfQoKLy8g44CQ56K65a6a44CR5q2j44GX44GE5bCO6Zai5pWwIGYnKM67KQpkb3VibGUgZGYoZG91YmxlIGxhbWJkYSkgewogICAgcmV0dXJuIDQuMCAqIHBvdyhsYW1iZGEsIDMpIC0gNi4wICogcG93KGxhbWJkYSwgMikgLSA4Ni4wICogbGFtYmRhIC0gMzYuMDsKfQoKdm9pZCBzb2x2ZV9uZXd0b24oaW50IGF0dGVtcHQsIGRvdWJsZSBsYW1iZGEwKSB7CiAgICBkb3VibGUgbGFtYmRhID0gbGFtYmRhMDsKICAgIGludCBpdGVyID0gMDsKCiAgICB3aGlsZSAoaXRlciA8PSBNQVhfSVRFUikgewogICAgICAgIGRvdWJsZSBmX3ZhbCA9IGYobGFtYmRhKTsKICAgICAgICBkb3VibGUgZGZfdmFsID0gZGYobGFtYmRhKTsKCiAgICAgICAgaWYgKGZhYnMoZGZfdmFsKSA8IDFlLTEyKSB7CiAgICAgICAgICAgIHJldHVybjsgCiAgICAgICAgfQoKICAgICAgICBkb3VibGUgZGVsdGEgPSBmX3ZhbCAvIGRmX3ZhbDsKICAgICAgICBsYW1iZGEgLT0gZGVsdGE7CiAgICAgICAgaXRlcisrOwoKICAgICAgICAvLyDnp7vli5Xot53pm6LjgafliKTlrpoKICAgICAgICBpZiAoZmFicyhkZWx0YSkgPCBFUFNJTE9OKSB7CiAgICAgICAgICAgIHByaW50Zigi6Kmm6KGMICMlZCAo5Yid5pyf5YCkICU1LjFmKSAtPiDlj47mnZ/miJDlip8gKCUyZOWbnikgfCDlm7rmnInlgKTop6MgzrsgPSAlLjEwZlxuIiwgCiAgICAgICAgICAgICAgICAgICBhdHRlbXB0LCBsYW1iZGEwLCBpdGVyLCBsYW1iZGEpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIC8vIOOBk+OBruaWsOOBl+OBhOeJueaAp+aWueeoi+W8j+OBrjTjgaTjga7osLfjgavntrrpupfjgavokL3jgaHjgovjgojjgYbjgavoqr/mlbTjgZfjgZ/liJ3mnJ/lgKQKICAgIGRvdWJsZSBpbml0aWFsX2xhbWJkYVtdID0gezEwLjAsIDIuMCwgLTIuNSwgLTYuMH07CgogICAgcHJpbnRmKCI9PT0g44CQMuOBpOebruOBruihjOWIl+OAkeODi+ODpeODvOODiOODs+ODu+ODqeODleOCveODs+azlSDmjqLntKLntZDmnpwgPT09XG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgc29sdmVfbmV3dG9uKGkgKyAxLCBpbml0aWFsX2xhbWJkYVtpXSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=