ページ 11

説明お願いします

Posted: 2011年6月27日(月) 21:15
by
以下のプログラムを参考にして自分でプログラムを作りたいんですが

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

double f(double x){
returnx;
}
main(){
int m;    発生した乱数の総数
int n;    発生した乱数の個数
int k;    積分図形に落ちた回数
double a; 積分区間の始点
double b; 積分区間の終点
double c; 矩形の高さ
double x; 乱数発生したx
double y; 乱数発生したy
double s; 積分の近似値

printf("");scanf("%d",&m);
printf("");scanf("%lf",&a);
printf("");scanf("%lf",&b);
printf("");scanf("%lf",&c);
k=n=0;
srand((unsigned)time(NULL));
while(++n<m){
x=a+(b-a)*(double)rand()/RAND_MAX;
y=c*(double)rand()/RAND_MAX;
if(y<f(x))_k++;
}
s=(double)k/n*c*(b-a);
printf("s=%f\n",s);
return 0;
}

s=(double)k/n*c*(b-a);
この部分がどういたってこうなったのかがわかりません
説明をお願いします

Re: 説明お願いします

Posted: 2011年6月27日(月) 21:24
by h2so5
何をするためのプログラムを作ろうと思っているのですか?

Re: 説明お願いします

Posted: 2011年6月27日(月) 21:27
by
モンテカルロ法を使った積分プログラムです

Re: 説明お願いします

Posted: 2011年6月27日(月) 21:33
by h2so5
上記のプログラム自体がデタラメなんですが...。
いったい何処から持ってきたんですか?

Re: 説明お願いします

Posted: 2011年6月27日(月) 21:34
by
上記のプログラム自体がデタラメなんですが...。
いったい何処から持ってきたんですか?

>>連絡は取れないんですが一応知り合いに教えていただきました。

Re: 説明お願いします

Posted: 2011年6月27日(月) 21:36
by h2so5
およそ手本にならないプログラムですので、
ネットで他のモンテカルロ法のサンプルを探したほうがいいと思います。

Re: 説明お願いします

Posted: 2011年6月27日(月) 21:40
by
およそ手本にならないプログラムですので、

>>それでOKだったみたいなんですが…


ネットで他のモンテカルロ法のサンプルを探したほうがいいと思います。

>>時間もあまりありませんし、出来たらさっきの部分のみどうしてああなるのか
教えていただきたいのですが…

Re: 説明お願いします

Posted: 2011年6月27日(月) 21:51
by h2so5
猿 さんが書きました: >>それでOKだったみたいなんですが…
命賭けてもいいですが動きません。
猿 さんが書きました: >>時間もあまりありませんし、出来たらさっきの部分のみどうしてああなるのか
教えていただきたいのですが…
その前に、モンテカルロ法は理解されていますか?

Re: 説明お願いします

Posted: 2011年6月27日(月) 22:04
by
命賭けてもいいですが動きません。
>>すいません
上の
return x;

if(y<f(x)) k++;
がこうでした


その前に、モンテカルロ法は理解されていますか?
>>完全には理解していません…

Re: 説明お願いします

Posted: 2011年6月27日(月) 22:15
by non
この前「孫策」さんが質問していたプログラムとほとんど同じですね。
検索したら、きっと前のスレが見つかりますよ。

>s=(double)k/n*c*(b-a);

cは長方形の縦の長さ、(b-a)は横の長さなので、C*(b-a)は長方形の面積。
kはy<f(x)の点の個数で、nは長方形内の点の数なので、k/nは長方形の中で、f(x)より小さい割合。
したがって、sは面積になります。

Re: 説明お願いします

Posted: 2011年6月27日(月) 22:21
by
この前「孫策」さんが質問していたプログラムとほとんど同じですね。
検索したら、きっと前のスレが見つかりますよ。
>>本当ですか?
探してみます


>s=(double)k/n*c*(b-a);
cは長方形の縦の長さ、(b-a)は横の長さなので、C*(b-a)は長方形の面積。
kはy<f(x)の点の個数で、nは長方形内の点の数なので、k/nは長方形の中で、f(x)より小さい割合。
したがって、sは面積になります。

>>わかりやすい説明ありがとうございます