1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

反復試行で確率を確認する

Last updated at Posted at 2019-09-05

この記事について

C++言語を使って反復試行をするプログラムを作り、
それを使って
事象Aが起こる確率と、事象Aの反復試行との関係を可視化しました。
初心者なのでC++らしくはないですが。

プログラム

胸を張って出せるものではないですが一応。

rt.cpp
# include <iostream>
# include <math.h>
using namespace std;

long double Combination(int n,int r) {

	long double result = 1;
	for (int i = 0; i < r; ++i) {
		result *= n - i;
		result /= r - i;
	}
	return result;
}

long double RT(long double pb, int n, int r) // pbは確率
{
	long double result;
	result = Combination(n, r) * pow(pb, r) * pow(1.0 - pb, n - r);
	return result;
}

const static int n_g = 30; // 試行回数

int main() {
	int num, deno;
	deno = 3; // 分母
	num = 2; // 分子
	cout << num << " / " << deno << "の確率の事象で" << endl;
	long double results[n_g+1];
	char graph[n_g+1][100];
	for (int i = 0; i <= n_g; ++i) {
		for (int j = 0; j < 100; ++j) {
			graph[i][j] = '0';
		}
	}
	for (int i = 0; i <= n_g; ++i) {
		results[i] = RT(num / (double long)deno, n_g, i);
		cout << n_g <<" 回の試行で " << i << " 回成功する確率の百分率は " << (int)(results[i] * 100) << " %" << endl;

		for (int j = 0; j < (int)(results[i] * 100); ++j) {
			graph[i][j] = '1';
		}
	}

	for (int j = 0; j < 100; ++j) {
		for (int i = 0; i <= n_g; ++i) {
			cout << graph[i][99-j] << flush;
		}
		cout << endl;
	}

}

2/3の確率で成功する事象で30回の反復試行をすると20回成功する確率が
一番高いのではと思い、作りました
また、0と1を使ってグラフっぽいものも作りました。

実行結果

image.png
image.png

別の確率でも。
image.png
image.png

わかったこと

結果として、予想通りでした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?