これまでで一番「情けなかったとき」はいつですか?

C言語において、区分求積法・台形公式・シンプソンの公式を行いたいのですがうまくいきません。
1/1+x*xを求めたいと思います。以下が途中まで作ったプログラムです。

#include <stdio.h>
#define FROM 0.0
#define TO 1.0

double func(double x)
{
double out;
out = 1.0 / ( 1.0 + x * x );
return (out);
}

double kubun(double start, double end, int num)
{
int i;
double h, s;
h = ( end - start ) / num;
s = 0.0;
for(i=0; i<num; i++) s += func( start + i * h + h / 2.0 );
return ( s * h );
}

double daikei(double start,double end,int num)
{
int i;
double h,s;
h = ( end - start ) / num;
s = 0.0;
for(i=1; i<num-1; i++) s += func( i * h );

return ((start / 2.0 + s + end / 2.0) * h );
}

double simpson(double start,double end,int num)
{
int i;
double h,s;
h = ( end - start ) / num;
s = 0.0;
for(i=1; i<num-1; i++)
if(i%2 == 0){
s = 2 * func(i * h);
}else{
s = 4 * func(i * h);
}

return ( (start + s + end) / 3 );
}


区分求積法はあったていると思いますが、不安なのでのせときます。
よろしくお願いします。

A 回答 (3件)

daikei とsimpsonはめちゃめちゃですね。



1) func に渡すパラメータは start(∫範囲の開始値) を足したもののはず。
2) daikei とsimpsonでは、積算値に start end(∫範囲の開始終了値)をそのまま
足してますが、func(start) func(end) が正解。
3) simpson では s+= となってないので積算してません。
    • good
    • 0
この回答へのお礼

細かい部分まで指摘していただきたすかりました。
ありがとうございます。

お礼日時:2011/12/30 14:58

daikei



> s += func( i * h );


simpson
> s = 2 * func(i * h);

> s = 4 * func(i * h);

これらをkubunの対応する部分と比較すればすぐ分かるでしょう。ただのケアレスミスですね。ほかは多分「あったている」。
    • good
    • 0
この回答へのお礼

急いでいたため間違えてしまいました。
解答ありがとうございます。

お礼日時:2011/12/30 14:57

どんな風にうまくいかないかを書いてください。


なお、C言語のカテゴリーで質問された方がよかったような気がします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
以降気をつけます。

お礼日時:2011/12/30 14:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報