Перетвóрення Боксу — Мюллера — метод моделювання стандартних нормально розподілених випадкових величин. Має два варіанти. Метод є точним, на відміну, наприклад, від методів що ґрунтуються на центральній граничній теоремі.
Метод був опублікований в 1958 році Джорджем Боксом і Мервіном Мюллером.
Перший варіант
Нехай і — незалежні випадкові величини, рівномірно розподілені на інтервалі . Обчислимо і за формулами:
Тоді і будуть незалежні і розподілені нормально з математичним сподіванням 0 і дисперсією 1. При реалізації на комп'ютері зазвичай швидше не обчислювати обидві тригонометричні функції — і — а розрахувати одну з них через іншу. Ще краще скористатися натомість другим варіантом перетворення Боксу — Мюллера.
Другий варіант
Нехай і — незалежні випадкові величини, рівномірно розподілені на відрізку . Обчислимо . Якщо виявиться, що чи , то значення і слід «викинути» і згенерувати наново. Як тільки виконається умова за формулами
і
слід розрахувати и , які, як і в першому випадку, будуть незалежними величинами, що задовольняють стандартному нормальному розподілу.
Коефіцієнт використовування базових випадкових величин для першого варіанту, очевидно, дорівнює одиниці. Для другого варіанту це відношення площі кола одиничного радіусу до площі квадрата із стороною два, тобто . Проте, на практиці другий варіант зазвичай виявляється швидшим, за рахунок того, що в ньому використовується тільки одна трансцендентна функція . Ця перевага для більшості реалізацій переважує необхідність генерації більшого числа рівномірно розподілених випадкових величин.
Перехід до загального нормального розподілу
Після отримання стандартної нормальної випадкової величини , можна легко перейти до величини , що є нормально розподіленою з математичним очікуванням і стандартним відхиленням за формулою:
Це вже не є частиною перетворення Боксу — Мюллера, але дозволяє завершити генерацію нормальної випадкової величини.
Реалізація
Приклад реалізації на мові C# генерації нормально розподілених випадкових величин за допомогою другого варіанту перетворення.
//Об'єкт для генерації рівномірно-розподіленої величини Random RND = new Random(); //Ця змінна зберігає друге прогенероване ще не використане значення, для прискорення послідовної генерації багатьох значень double LastFreeValue = double.NaN; /// <summary> /// Нормально розподілена випадкова величина /// </summary> double RNDGauss_BoxMuller() { if(double.IsNaN(LastFreeValue)) { //якщо невикористаного значення немає - генерується наступна пара double x = 0, y = 0, R = 2; while (R > 1) { //генеруються випадкові x та y, поки не буде виконана умова R <= 1 x = RND.NextDouble() * 2 - 1; y = RND.NextDouble() * 2 - 1; R = x * x + y * y; } double t = Math.Sqrt(-2 * Math.Log(R) / R); //друге випадкове значення зберігається для подальшого використання LastFreeValue = y * t; //повертається перше прогенероване випадкове значення return x * t; } else { //якщо є невикористане значення - воно повертається і обнуляється double Z1 = LastFreeValue; LastFreeValue = double.NaN; return Z1; } }
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Peretvorennya Boksu Myullera metod modelyuvannya standartnih normalno rozpodilenih vipadkovih velichin Maye dva varianti Metod ye tochnim na vidminu napriklad vid metodiv sho gruntuyutsya na centralnij granichnij teoremi Metod buv opublikovanij v 1958 roci Dzhordzhem Boksom i Mervinom Myullerom Pershij variantNehaj r displaystyle r i ϕ displaystyle phi nezalezhni vipadkovi velichini rivnomirno rozpodileni na intervali 0 1 displaystyle 0 1 Obchislimo z0 displaystyle z 0 i z1 displaystyle z 1 za formulami z0 cos 2pϕ 2ln r displaystyle z 0 cos 2 pi phi sqrt 2 ln r z1 sin 2pϕ 2ln r displaystyle z 1 sin 2 pi phi sqrt 2 ln r Todi z0 displaystyle z 0 i z1 displaystyle z 1 budut nezalezhni i rozpodileni normalno z matematichnim spodivannyam 0 i dispersiyeyu 1 Pri realizaciyi na komp yuteri zazvichaj shvidshe ne obchislyuvati obidvi trigonometrichni funkciyi cos displaystyle cos cdot i sin displaystyle sin cdot a rozrahuvati odnu z nih cherez inshu She krashe skoristatisya natomist drugim variantom peretvorennya Boksu Myullera Drugij variantNehaj x displaystyle x i y displaystyle y nezalezhni vipadkovi velichini rivnomirno rozpodileni na vidrizku 1 1 displaystyle 1 1 Obchislimo R x2 y2 displaystyle R x 2 y 2 Yaksho viyavitsya sho R gt 1 displaystyle R gt 1 chi R 0 displaystyle R 0 to znachennya x displaystyle x i y displaystyle y slid vikinuti i zgeneruvati nanovo Yak tilki vikonayetsya umova 0 lt R 1 displaystyle 0 lt R leq 1 za formulami z0 x 2ln RR displaystyle z 0 x cdot sqrt 2 ln R over R i z1 y 2ln RR displaystyle z 1 y cdot sqrt 2 ln R over R slid rozrahuvati z0 displaystyle z 0 i z1 displaystyle z 1 yaki yak i v pershomu vipadku budut nezalezhnimi velichinami sho zadovolnyayut standartnomu normalnomu rozpodilu Koeficiyent vikoristovuvannya bazovih vipadkovih velichin dlya pershogo variantu ochevidno dorivnyuye odinici Dlya drugogo variantu ce vidnoshennya ploshi kola odinichnogo radiusu do ploshi kvadrata iz storonoyu dva tobto p 4 0 785 displaystyle pi 4 approx 0 785 Prote na praktici drugij variant zazvichaj viyavlyayetsya shvidshim za rahunok togo sho v nomu vikoristovuyetsya tilki odna transcendentna funkciya ln displaystyle ln cdot Cya perevaga dlya bilshosti realizacij perevazhuye neobhidnist generaciyi bilshogo chisla rivnomirno rozpodilenih vipadkovih velichin Perehid do zagalnogo normalnogo rozpodiluPislya otrimannya standartnoyi normalnoyi vipadkovoyi velichini z displaystyle z mozhna legko perejti do velichini 3 N m s2 displaystyle xi sim N mu sigma 2 sho ye normalno rozpodilenoyu z matematichnim ochikuvannyam m displaystyle mu i standartnim vidhilennyam s displaystyle sigma za formuloyu 3 m sz displaystyle xi mu sigma z Ce vzhe ne ye chastinoyu peretvorennya Boksu Myullera ale dozvolyaye zavershiti generaciyu normalnoyi vipadkovoyi velichini RealizaciyaPriklad realizaciyi na movi C generaciyi normalno rozpodilenih vipadkovih velichin za dopomogoyu drugogo variantu peretvorennya Ob yekt dlya generaciyi rivnomirno rozpodilenoyi velichini Random RND new Random Cya zminna zberigaye druge progenerovane she ne vikoristane znachennya dlya priskorennya poslidovnoyi generaciyi bagatoh znachen double LastFreeValue double NaN lt summary gt Normalno rozpodilena vipadkova velichina lt summary gt double RNDGauss BoxMuller if double IsNaN LastFreeValue yaksho nevikoristanogo znachennya nemaye generuyetsya nastupna para double x 0 y 0 R 2 while R gt 1 generuyutsya vipadkovi x ta y poki ne bude vikonana umova R lt 1 x RND NextDouble 2 1 y RND NextDouble 2 1 R x x y y double t Math Sqrt 2 Math Log R R druge vipadkove znachennya zberigayetsya dlya podalshogo vikoristannya LastFreeValue y t povertayetsya pershe progenerovane vipadkove znachennya return x t else yaksho ye nevikoristane znachennya vono povertayetsya i obnulyayetsya double Z1 LastFreeValue LastFreeValue double NaN return Z1