- 締切済み
すみません…。C言語の質問です!!
以下のような、ニューロン法のプログラムを作成したのですが、上手く結果を得ることが出来ませんでした…。どこが、どのように間違っているのかが分からないので、プログラムを修正していただけると嬉しいです。 よろしくお願いします。 1. #include <stdio.h> 2. #include <stdlib.h> 3. #include <math.h> 4. /*--- 関数 f( x ) = x - cos( x ) ---*/ 5. double f( double x ) 6. { 7. return x - cos(x) ; 8. } 9. double df( double x ) 10. { 11. return 1 + sin(x) ; 12. } 13. /*--- メイン関数 ---*/ 14. int main( void) 15. { 16. int cnt ; 17. double x_OLD, x_NEW, eps = 0.0001 ; 18. cnt = 0 ; 19. x_NEW = 1.5 ; 20. printf("計算回数 x f(x)\n") ; 21. printf("%d %lf %lf\n", cnt, x_NEW, f(x_NEW)) ; 22. do{ 23. cnt++; 24. x_NEW = x_OLD ; 25. x_NEW = x_OLD - ( f(x_OLD) / df(x_OLD) ) ; 26. printf("%d %lf %lf\n", cnt, x_NEW, f(x_NEW)) ; 27. }while( fabs(x_NEW - x_OLD) < eps ); 28. }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
x_OLDが代入されていませんね。ちゃんと自分で考えましたか? int main( void) { int cnt ; double x_OLD, x_NEW, eps = 0.0001 ; cnt = 0 ; x_OLD = 1.5 ; printf("計算回数\tx\tf(x)\n") ; printf("%d\t%lf\t%lf\n", cnt, x_NEW, f(x_NEW)) ; while(1){ cnt++; x_NEW = x_OLD - ( f(x_OLD) / df(x_OLD) ) ; printf("%d\t%lf\t%lf\n", cnt, x_NEW, f(x_NEW)) ; if( fabs(x_NEW - x_OLD) < eps ) break; x_OLD = x_NEW; } }
変数x_OLDの初期値が不定、値を更新する処理がない。 さっさと、デバッガの使い方を覚えて、ステップ実行して、変数の値が適切に更新されてるかなど、チェックするのが早道だよ。