import math import numpy as np from scipy import integrate #历史数据处理 def handle_data(all_marks=[569, 570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594, 595,596,597,598,599 ]):#以列表形式传入省份所有考生的成绩[1,2,3] a = np.mean(all_marks)#平均值 sigma = np.std(all_marks)#方差 print('a=',a,'sigma=',sigma) return a,sigma #等效分计算 def mark(a=584.0,sigma=8.94427190999916,per_mark=600):#a和sigma由上一个函数得出,per_mark为需要转化成等效成绩的高考分数 re_mark = 100 * ((per_mark - a) / sigma) + 500 if re_mark > 900: re_mark = 900 elif re_mark < 100: re_mark = 100 return re_mark #录取概率 def P_get(uni_marks=[580,581,582,583, 584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599],per_mark=589): #以列表形式学校录取的所有考生的成绩 per_mark = mark(per_mark=per_mark) re_uni_mark = [] #学校录取学生的等效分 for i in uni_marks: re_uni_mark.append(mark(per_mark=i)) E = np.mean(re_uni_mark) #学校录取考生的等效分平均值即期望 S = np.std(re_uni_mark) D = S ** 2 #样本方差 def p(x): #录取分数的概率密度函数 return (1/(D*(2*math.pi)**0.5))*((math.e)**(-((x-E)**2)/(2*D))) P,err = integrate.quad(p,100,per_mark) P = P*100 print('录取概率为',P) return P # num = 570 # while num < 600: # print('分数为',num,'时','录取概率为',P_get(per_mark=num)) # num += 1