Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import array
- m=pow(2,31)-1 #модуль
- a=4096 #
- a1=4096 #
- d=4096 #
- c=150889 #не 0, иначе - мультипликативный
- X0=57956 #
- k=0.1 #вероятность попадания в категорию
- count=int(input("Сколько случайных чисел нужно? "))
- massiv=array.array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
- for n in range (0,15):
- if X0 > 10:
- massiv[n]=int(X0%10) #разбиение на разряды
- else:
- massiv[n]=X0
- break
- X0=int(X0/10)
- massivA=array.array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
- massivXn=array.array('f')
- for w in range (0,15):
- if a > 10:
- massivA[w]=int(a%10) #разбиение на разряды
- else:
- massivA[w]=a
- break
- a=int(a/10)
- def multiply (x, a):
- sum = 0
- for i in range (0,15):
- for j in range (0,15):
- sum=sum+x[i]*a[j]*pow(10,i+j) #перемножение X0 и a
- return sum
- def F(x):
- #sigma = 3
- #mu = 0
- #return 1/(sigma*math.sqrt(2*math.pi)) * math.exp(-1*pow(x-mu,2)/2*pow(sigma,2))
- #return 1-math.exp(-2*x*x)
- return x
- counters=array.array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
- firstNum=0 #первая часть числителя без n
- secondNum=X0 #вторая часть числителя и знаменателя до возведения в квадрат
- denum=pow(X0, 2) #первая часть знаменателя
- prev = X0
- for l in range (0, count-1):
- Xn=(d*multiply(massiv,massiv)+multiply(massiv,massivA)+c)%m
- #Xn=d*X0^2+a*X0+c(mod m)
- massivXn.append(Xn/pow(2,31))
- if (l == (count-1)):
- firstNum = firstNum + Xn*X0
- else:
- firstNum = firstNum + prev*Xn
- secondNum = secondNum + Xn
- denum = denum + pow(Xn, 2)
- print (Xn/pow(2,31))
- cellnumber = 0;
- for cc in range(1,10):
- if (Xn/pow(2,31)) > cc/10:
- cellnumber = cellnumber+1; #переход к ячейке номер cc
- else:
- break
- counters[cellnumber] = counters[cellnumber] + 1 #увеличение счётчика попаданий в категорию
- prev = Xn
- for n in range (0,15):
- if Xn > 10:
- massiv[n]=int(Xn%10)
- else:
- massiv[n]=Xn
- break
- Xn=int(Xn/10)
- print(counters)
- sum = 0
- for j in range (1, 11):
- sum = sum + (pow(counters[j-1],2))/k
- print("Сумма равна ", sum)
- hi = sum/count - count #формула для расчёта хи-квадрат
- print("Хи-квадрат для этого распределения равно ",hi)
- series = (count*firstNum-pow(secondNum, 2))/(count*denum-pow(secondNum, 2))
- print("C = ",series )
- massivV=array.array('f')
- for t in range(0, 5):
- locmax = 0
- for s in range(t*5+1, t*5+5):
- locmax = max(locmax, massivXn[s])
- massivV.append(locmax)
- massivXn = sorted(massivXn)
- print(massivXn)
- Kplus = 1/(count-1)-F(massivXn[0])
- Kmin = F(massivXn[0])
- for z in range(2, count):
- Kplus = max(Kplus, (z/(count-1)-F(massivXn[z-1])))
- Kmin = max(Kmin, (F(massivXn[z-1]) - (z-1)/(count-1)))
- print("К+ статистика = ", math.sqrt(count-1)*Kplus)
- print("К- статистика = ", math.sqrt(count-1)*Kmin)
- print("Максимумы в шестерках ", massivV)
- massivV = sorted(massivV)
- KplusT = 1/4-pow(massivV[0], 6)
- KminT = pow(massivV[0], 6)
- for z in range(2, 4):
- KplusT = max(KplusT, (z/(5)-pow(massivV[z-1], 6)))
- KminT = max(KminT, (pow(massivV[z-1],6) - (z-1)/(5)))
- print("Кt+ статистика = ", math.sqrt(5)*KplusT)
- print("Кt- статистика = ", math.sqrt(5)*KminT)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement