Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Преобразование случайной величины с равномерным распределением в величину с нормальным распределением

#cpp #математика #теория_вероятностей


У меня есть некое кол-во случайных величин float в диапазоне [0;1] и эти величины
имеют равномерное распределение.

Если такая величина X имеет нормальное распределение, то, величина
K = m + a * tan(PI*(X-0.5)) имеет распределение коши.

Возможно ли по аналогии преобразовать такую величину X, в величину имеющую нормальное
распределение?
    


Ответы

Ответ 1



Написал грубо и точно (2.5%) функцию InverseErf. Она очень сложна для вычислений. // g++ inverf.cpp -o inverf # include # include // -1 => -Inf ; 0 => 0 ; +1 => Inf // -0.82 .. +0.82 => третья степень // 0.82 .. 1.0 => сложно double InverseErf(double x){ bool flagneg = (x < 0.0); x=fabs(x); double result; if(x<0.82) result = (x*x*0.37+0.88)*x; else { x=log(1.0-x); double const HalfPi = 1.57 ; result = sqrt(-x-log(-HalfPi*(log(HalfPi)+2.0*x))/2.0);} return flagneg ? -result : result ; } double SimpleToNormal(double x , double med , double sigma){ return med + sqrt(2.0)*sigma*InverseErf(2.0*x-1.0);} int main() { std::cout<<"inverf(0.999)="<

Комментариев нет:

Отправить комментарий