#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)="<
Комментариев нет:
Отправить комментарий