# -*- coding: UTF-8 -*- from math import * import numpy as np ############ # 組合せ nCr ############ def comb(n, r) : c = 1.0 x = 1.0 y = 1.0 if r > 0 : if r > n-r : r = n - r for i1 in range(n, n-r, -1) : x *= i1 for i1 in range(2, r+1) : y *= i1 c = x / y return c ###################################### # 二項分布の計算(P(X = x), P(X < x)) # x : データ # n,p : パラメータ # pr : P(X = x) # return : P(X < x) # coded by Y.Suganuma ###################################### def binomial(x, n, p, pr) : q = 1.0 - p pr[0] = comb(n, x) * pow(p, x) * pow(q, n-x) f = pr[0] for i1 in range(0, x) : f += comb(n, i1) * pow(p, i1) * pow(q, n-i1) return f ---------------------------------- # -*- coding: UTF-8 -*- import numpy as np import sys from math import * from function import binomial ############################ # 二項分布の計算 # coded by Y.Suganuma ########################### s = input("n は? ") n = int(s) s = input("p は? ") p = float(s) s = input("グラフ出力?(=1: yes, =0: no) ") sw = int(s) pr = np.empty(1, np.float) # 密度関数と分布関数の値 if sw == 0 : s = input(" データは? ") x = int(s) f = binomial(x, n, p, pr) print("P(X = " + str(x) + ") = " + str(pr[0]) + ", P( X < " + str(x) + ") = " + str(f) + " (n = " + str(n) + ", p = " + str(p) + ")") # グラフ出力 else : file1 = input(" 密度関数のファイル名は? ") file2 = input(" 分布関数のファイル名は? ") out1 = open(file1, "w") out2 = open(file2, "w") for x in range(0, n+1) : f = binomial(x, n, p, pr) out1.write(str(x) + " " + str(pr[0]) + "\n") out2.write(str(x) + " " + str(f) + "\n") out1.close() out2.close()