Функция на VBA, возвращающая случайную величину по нормальному распределению

Узнай цену своей работы

Формулировка задачи:

Посоветуйте способ преобразования равномерно распределённой случайной величины (стандартная функция Rnd в VBA) в случайную величину по нормальному распределению на VBA. Вообще говоря, мне нужно, чтобы возвращаемое значение было в виде double в заданном диапазоне, в котором оно варьируется по нормальному распределению (мат. ожидание - середина отрезка, дисперсию задаём). При этом важно, чтобы функция работала очень быстро, но допускается неточность в строгом соблюдении нормального распределения, важна лишь суть (чтобы крайние значения появлялись редко, а центровые - часто).

Решение задачи: «Функция на VBA, возвращающая случайную величину по нормальному распределению»

textual
Листинг программы
  1. Option Explicit
  2. Const e = 2.71828459045235
  3. Const pi = 3.1415926535898
  4. Const t = vbTab & vbTab, pp = vbCr & vbCr ' табуляторы и абзацы (для вывода)
  5.  
  6. Sub tipa_gauss()
  7. Dim i As Long, N As Long, opyt(1 To 20) As Double, vyvod As String
  8. Randomize
  9.    
  10. 'Бросим для примера 20 случайных точек:
  11. For i = 1 To 20
  12.     opyt(i) = 2 * Rnd - 1 'МО этого (равномерного) распределения равно 0
  13.    vyvod = vyvod & _
  14.     Format(i, "00") & t & _
  15.     Round(opyt(i), 3) & t & Round(NORM(opyt(i)), 3) & vbCr 'таблица
  16. Next
  17.    
  18. If MsgBox("№ опыта" & vbTab & "Bыпало (x)" & vbTab & "NORM(x)" & pp & vyvod, _
  19.     vbOKCancel) = vbCancel Then Exit Sub Else tipa_gauss
  20. End Sub
  21.  
  22. Function NORM(x)
  23. Const sigma = .1 'среднее квадратическое отклонение (CKO)
  24. Const mu = 0    'матожидание (MO)
  25. Dim coef As Double
  26.     coef = 1 / sigma / Sqr(2 * pi)
  27.     NORM = coef * e ^ (-(x - mu) ^ 2 / 2 / sigma / sigma)
  28. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы