Sub normalnaya recursia()
Dim n As Long, k As Integer, H As Double, M As Double, S As Double, j As Integer
n = 50
Worksheets(1).Range("A1:A" & CStr(n)).Copy
Worksheets(1).Range("B1:B" & CStr(n)).PasteSpecial
Worksheets(1).Range("B1:B" & CStr(n)).SortSpecial , , xlAscending
ReDim x(1 To n) As Double
k = 1 + 3.3 * Log(n) / Log(10): For i = 1 To n: x(i) = Cells(i, 2): Next i: H = (x(n) - x(1)) / k
ReDim G(k) As Double, F(k) As Double, P(k) As Double
G(0) = x(1): For i = 1 To n: M = M + x(i) / n: Next i: For i = 1 To n: S = S + (x(i) - M) ^ 2 / (n - 1): Next i: S = Sqr(S)
With Excel.WorksheetFunction
For j = 0 To k - 1
G(j + 1) = G(j) + H
For i = 1 To n
If G(j) < x(i) And G(j + 1) >= x(i) Then F(j) = F(j) + 1 / n
Next i
P(j) = H / (S * Sqr(2 * .Pi)) * Exp(-(G(j) + H / 2 - M) ^ 2 / (2 * S ^ 2))
P(j) = H * .NormDist(G(j) + H / 2, .Average(x), .StDev(x), False)
H2 = H2 + (F(j) - P(j)) ^ 2 / P(j)
Next j
Debug.Print H2, k - 3, .ChiInv(0.05, k - 3)
If H2 < .ChiInv(0.05, k - 3) Then Debug.Print "гипотеза принемается"
If .Skew(x) > 3 * Sqr(6 * (n - 1) / ((n + 1) * (n + 3))) Or .Kurt(x) > 3 * Sqr(24 * n * (n - 2) * (n - 3) / ((n - 1) ^ 2 * (n + 3) * (n + 5))) Then
Debug.Print "0"
End If
End With
End Sub
Соседние файлы в папке Мат. методы. 2 семестр(3 модуль)