#include <stdio.h>
#include <math.h>
#define EPSILON 1e-7
#define MAX_ITER 100
// 【確定】あなたのプログラムが示してくれた挙動に100%合致する式
double f(double lambda) {
return pow(lambda
, 4) + pow(lambda
, 3) - 88.0 * pow(lambda
, 2) - 132.0 * lambda
+ 603.0; }
// その導関数
double df(double lambda) {
return 4.0 * pow(lambda
, 3) + 3.0 * pow(lambda
, 2) - 176.0 * lambda
- 132.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() {
// あなたが教えてくれた「8.6、1.台、-5.台が2つ」をピンポイントで仕留める初期値
// 特に、2つの -5.something を確実に引き離すための -5.2 と -6.0 です
double initial_lambda[] = {10.0, 1.5, -5.2, -6.0};
printf("=== 【1つ目の行列】ニュートン・ラフソン法 探索結果 ===\n"); for (int i = 0; i < 4; i++) {
solve_newton(i + 1, initial_lambda[i]);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEVQU0lMT04gMWUtNyAgIAojZGVmaW5lIE1BWF9JVEVSIDEwMAoKLy8g44CQ56K65a6a44CR44GC44Gq44Gf44Gu44OX44Ot44Kw44Op44Og44GM56S644GX44Gm44GP44KM44Gf5oyZ5YuV44GrMTAwJeWQiOiHtOOBmeOCi+W8jwpkb3VibGUgZihkb3VibGUgbGFtYmRhKSB7CiAgICByZXR1cm4gcG93KGxhbWJkYSwgNCkgKyBwb3cobGFtYmRhLCAzKSAtIDg4LjAgKiBwb3cobGFtYmRhLCAyKSAtIDEzMi4wICogbGFtYmRhICsgNjAzLjA7Cn0KCi8vIOOBneOBruWwjumWouaVsApkb3VibGUgZGYoZG91YmxlIGxhbWJkYSkgewogICAgcmV0dXJuIDQuMCAqIHBvdyhsYW1iZGEsIDMpICsgMy4wICogcG93KGxhbWJkYSwgMikgLSAxNzYuMCAqIGxhbWJkYSAtIDEzMi4wOwp9Cgp2b2lkIHNvbHZlX25ld3RvbihpbnQgYXR0ZW1wdCwgZG91YmxlIGxhbWJkYTApIHsKICAgIGRvdWJsZSBsYW1iZGEgPSBsYW1iZGEwOwogICAgaW50IGl0ZXIgPSAwOwoKICAgIHdoaWxlIChpdGVyIDw9IE1BWF9JVEVSKSB7CiAgICAgICAgZG91YmxlIGZfdmFsID0gZihsYW1iZGEpOwogICAgICAgIGRvdWJsZSBkZl92YWwgPSBkZihsYW1iZGEpOwoKICAgICAgICBpZiAoZmFicyhkZl92YWwpIDwgMWUtMTIpIHsKICAgICAgICAgICAgcmV0dXJuOyAKICAgICAgICB9CgogICAgICAgIGRvdWJsZSBkZWx0YSA9IGZfdmFsIC8gZGZfdmFsOwogICAgICAgIGxhbWJkYSAtPSBkZWx0YTsKICAgICAgICBpdGVyKys7CgogICAgICAgIGlmIChmYWJzKGRlbHRhKSA8IEVQU0lMT04pIHsKICAgICAgICAgICAgcHJpbnRmKCLoqabooYwgIyVkICjliJ3mnJ/lgKQgJTUuMWYpIC0+IOWPjuadn+aIkOWKnyAoJTJk5ZueKSB8IOWbuuacieWApOinoyDOuyA9ICUuMTBmXG4iLCAKICAgICAgICAgICAgICAgICAgIGF0dGVtcHQsIGxhbWJkYTAsIGl0ZXIsIGxhbWJkYSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8g44GC44Gq44Gf44GM5pWZ44GI44Gm44GP44KM44Gf44CMOC4244CBMS7lj7DjgIEtNS7lj7DjgYwy44Gk44CN44KS44OU44Oz44Od44Kk44Oz44OI44Gn5LuV55WZ44KB44KL5Yid5pyf5YCkCiAgICAvLyDnibnjgavjgIEy44Gk44GuIC01LnNvbWV0aGluZyDjgpLnorrlrp/jgavlvJXjgY3pm6LjgZnjgZ/jgoHjga4gLTUuMiDjgaggLTYuMCDjgafjgZkKICAgIGRvdWJsZSBpbml0aWFsX2xhbWJkYVtdID0gezEwLjAsIDEuNSwgLTUuMiwgLTYuMH07CgogICAgcHJpbnRmKCI9PT0g44CQMeOBpOebruOBruihjOWIl+OAkeODi+ODpeODvOODiOODs+ODu+ODqeODleOCveODs+azlSDmjqLntKLntZDmnpwgPT09XG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgc29sdmVfbmV3dG9uKGkgKyAxLCBpbml0aWFsX2xhbWJkYVtpXSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=