説明お願いします

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

説明お願いします

#1

投稿記事 by » 14年前

以下のプログラムを参考にして自分でプログラムを作りたいんですが

#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);
この部分がどういたってこうなったのかがわかりません
説明をお願いします

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 説明お願いします

#2

投稿記事 by h2so5 » 14年前

何をするためのプログラムを作ろうと思っているのですか?

Re: 説明お願いします

#3

投稿記事 by » 14年前

モンテカルロ法を使った積分プログラムです

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 説明お願いします

#4

投稿記事 by h2so5 » 14年前

上記のプログラム自体がデタラメなんですが...。
いったい何処から持ってきたんですか?

Re: 説明お願いします

#5

投稿記事 by » 14年前

上記のプログラム自体がデタラメなんですが...。
いったい何処から持ってきたんですか?

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 説明お願いします

#6

投稿記事 by h2so5 » 14年前

およそ手本にならないプログラムですので、
ネットで他のモンテカルロ法のサンプルを探したほうがいいと思います。

Re: 説明お願いします

#7

投稿記事 by » 14年前

およそ手本にならないプログラムですので、

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


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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 説明お願いします

#8

投稿記事 by h2so5 » 14年前

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

Re: 説明お願いします

#9

投稿記事 by » 14年前

命賭けてもいいですが動きません。
>>すいません
上の
return x;

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


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

non
記事: 1097
登録日時: 15年前

Re: 説明お願いします

#10

投稿記事 by non » 14年前

この前「孫策」さんが質問していたプログラムとほとんど同じですね。
検索したら、きっと前のスレが見つかりますよ。

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

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

Re: 説明お願いします

#11

投稿記事 by » 14年前

この前「孫策」さんが質問していたプログラムとほとんど同じですね。
検索したら、きっと前のスレが見つかりますよ。
>>本当ですか?
探してみます


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

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

閉鎖

“C言語何でも質問掲示板” へ戻る