こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

すみません…。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("計算回数xf(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.}

投稿日時 - 2015-12-19 23:20:08

QNo.9098413

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

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;
}
}

投稿日時 - 2015-12-20 02:33:30

-広告-

変数x_OLDの初期値が不定、値を更新する処理がない。
さっさと、デバッガの使い方を覚えて、ステップ実行して、変数の値が適切に更新されてるかなど、チェックするのが早道だよ。

投稿日時 - 2015-12-19 23:43:48

-広告-
-広告-
-広告-
-広告-