• 締切済み

C言語プログラミング

プログラミングについてです。 osはLinuxです。 x+logx=0の解を求めるプログラムを作れで ニュートン法を使ってみましたがあってますか? #include <stdio.h> #include <math.h> #define EPS 1e-8 main( ) { double a, old_x, new_x; int i; printf(" a="); scanf("%lf", &a); new_x = a; for(i=1; i<=100; i++) { old_x=new_x; new_x = old_x*(1-log(old_x))/(old_x+1); printf("x%d = %f\n", i,new_x); if(fabs(old_x*(1-log(old_x))/(old_x+1)) < EPS) break; } } いろいろな数字で実行してみた結果 nanと 0.567143の二つに分かれました。 どこか間違いがあるのですか

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

そのような入力をしたのでしょう? a=で 自然対数の底e以上の数値を入力した場合 1-log(old_x) がどのような値になるかを考えて見ましょう 収束条件の判定は if ( fabs( old_x - new_x ) < EPS )   break; 具合ではないかと ・・・

noname#74733
質問者

お礼

ありがとございます

関連するQ&A

専門家に質問してみよう