Erf(x), Erfc(x), вычисления интеграла...
От: Аноним  
Дата: 22.03.06 06:53
Оценка:
Подскажите пожалуйста как в Windows реализовать данныу функцию, а именно интересует ERFC(x) :
вычисление интеграла вероятности ошибки и дополнения к нему

Вот какую доку нашел:

Re: Erf(x), Erfc(x), вычисления интеграла...
От: Аноним  
Дата: 22.03.06 06:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите пожалуйста как в Windows реализовать данныу функцию, а именно интересует ERFC(x) :

А>вычисление интеграла вероятности ошибки и дополнения к нему

А>Вот какую доку нашел:


А>


Вот ссылка на полную доку: описание команды в ЛИНУКСЕ:
http://alexm.here.ru/manpages-ru/man3/erf.3.html
Re: Erf(x), Erfc(x), вычисления интеграла...
От: MBo  
Дата: 22.03.06 07:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите пожалуйста как в Windows реализовать данныу функцию, а именно интересует ERFC(x) :


В Numerical Recipes есть (6 глава)
http://www.library.cornell.edu/nr/
Re: Erf(x), Erfc(x), вычисления интеграла...
От: kfmn Россия  
Дата: 22.03.06 09:14
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Подскажите пожалуйста как в Windows реализовать данныу функцию, а именно интересует ERFC(x) :

А>вычисление интеграла вероятности ошибки и дополнения к нему

Надо было в свое время — перевел MATLABовский исходник на C (сделано через дробно-рациональные аппроксимации на нескольких отрезках):

double erf(double x)
{
    double y,z,xnum,xden,del,result;
    int i;
    const double xbreak = 0.46875;
    const double pi=3.14159265358979;


    y = fabs(x);

//  evaluate  erf  for  |x| <= 0.46875
    if (y<xbreak)
    {
        double a[] = {3.16112374387056560e00, 1.13864154151050156e02, 3.77485237685302021e02,
                      3.20937758913846947e03, 1.85777706184603153e-1};
        double b[] = {2.36012909523441209e01, 2.44024637934444173e02,  1.28261652607737228e03,
                      2.84423683343917062e03};

        z = y * y;
        xnum = a[4] * z;
        xden = z;
        for (i=0; i<3; i++)
        {
           xnum = (xnum + a[i]) * z;
           xden = (xden + b[i]) * z;
        }
        result= x * (xnum + a[3]) / (xden + b[3]);
    }
//  evaluate  erfc  for 0.46875 <= |x| <= 4.0
    else if ((y > xbreak) && (y <= 4.))
    {
        double c[] = {5.64188496988670089e-1, 8.88314979438837594e00, 6.61191906371416295e01,
                      2.98635138197400131e02, 8.81952221241769090e02, 1.71204761263407058e03,
                      2.05107837782607147e03, 1.23033935479799725e03, 2.15311535474403846e-8};
        double d[] = {1.57449261107098347e01, 1.17693950891312499e02, 5.37181101862009858e02,
                      1.62138957456669019e03, 3.29079923573345963e03, 4.36261909014324716e03,
                      3.43936767414372164e03, 1.23033935480374942e03};

        xnum = c[8] * y;
        xden = y;
        for (i=0; i<7; i++)
        {
            xnum = (xnum + c[i]) * y;
            xden = (xden + d[i]) * y;
        }
        result = (xnum + c[7]) / (xden + d[7]);
        z = ((int)(y*16))/16.0;
        del = (y-z)*(y+z);
        result *= exp(-z*z-del);
    }
//   evaluate  erfc  for |x| > 4.0
    else
    {
        double p[] = {3.05326634961232344e-1, 3.60344899949804439e-1, 1.25781726111229246e-1,
                      1.60837851487422766e-2, 6.58749161529837803e-4, 1.63153871373020978e-2};
        double q[] = {2.56852019228982242e00, 1.87295284992346047e00, 5.27905102951428412e-1,
                      6.05183413124413191e-2, 2.33520497626869185e-3};
        z = 1 / (y * y);
        xnum = p[5] * z;
        xden = z;
        for (i=0; i<4; i++)
        {
           xnum = (xnum + p[i]) * z;
           xden = (xden + q[i]) * z;
        }
        result = z * (xnum + p[4]) / (xden + q[4]);
        result = (1/sqrt(pi) -  result) / y;
        z = ((int)(y*16))/16.0;
        del = (y-z) * (y+z);
        result *= exp(-z*z-del);
    }

//   fix up for negative argument, erf, etc.
    if (x > xbreak)
       result = 1 - result;
    if (x < -xbreak)
       result = result - 1;

    return result;
}
Re[2]: Erf(x), Erfc(x), вычисления интеграла...
От: Аноним  
Дата: 22.03.06 09:51
Оценка:
Здравствуйте, kfmn, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Подскажите пожалуйста как в Windows реализовать данныу функцию, а именно интересует ERFC(x) :

А>>вычисление интеграла вероятности ошибки и дополнения к нему

K>Надо было в свое время — перевел MATLABовский исходник на C (сделано через дробно-рациональные аппроксимации на нескольких отрезках):


K>
K>double erf(double x)
K>{
K>    double y,z,xnum,xden,del,result;
K>    int i;
K>    const double xbreak = 0.46875;
K>    const double pi=3.14159265358979;


K>    y = fabs(x);

K>//  evaluate  erf  for  |x| <= 0.46875
K>    if (y<xbreak)
K>    {
K>        double a[] = {3.16112374387056560e00, 1.13864154151050156e02, 3.77485237685302021e02,
K>                      3.20937758913846947e03, 1.85777706184603153e-1};
K>        double b[] = {2.36012909523441209e01, 2.44024637934444173e02,  1.28261652607737228e03,
K>                      2.84423683343917062e03};

K>        z = y * y;
K>        xnum = a[4] * z;
K>        xden = z;
K>        for (i=0; i<3; i++)
K>        {
K>           xnum = (xnum + a[i]) * z;
K>           xden = (xden + b[i]) * z;
K>        }
K>        result= x * (xnum + a[3]) / (xden + b[3]);
K>    }
K>//  evaluate  erfc  for 0.46875 <= |x| <= 4.0
K>    else if ((y > xbreak) && (y <= 4.))
K>    {
K>        double c[] = {5.64188496988670089e-1, 8.88314979438837594e00, 6.61191906371416295e01,
K>                      2.98635138197400131e02, 8.81952221241769090e02, 1.71204761263407058e03,
K>                      2.05107837782607147e03, 1.23033935479799725e03, 2.15311535474403846e-8};
K>        double d[] = {1.57449261107098347e01, 1.17693950891312499e02, 5.37181101862009858e02,
K>                      1.62138957456669019e03, 3.29079923573345963e03, 4.36261909014324716e03,
K>                      3.43936767414372164e03, 1.23033935480374942e03};

K>        xnum = c[8] * y;
K>        xden = y;
K>        for (i=0; i<7; i++)
K>        {
K>            xnum = (xnum + c[i]) * y;
K>            xden = (xden + d[i]) * y;
K>        }
K>        result = (xnum + c[7]) / (xden + d[7]);
K>        z = ((int)(y*16))/16.0;
K>        del = (y-z)*(y+z);
K>        result *= exp(-z*z-del);
K>    }
K>//   evaluate  erfc  for |x| > 4.0
K>    else
K>    {
K>        double p[] = {3.05326634961232344e-1, 3.60344899949804439e-1, 1.25781726111229246e-1,
K>                      1.60837851487422766e-2, 6.58749161529837803e-4, 1.63153871373020978e-2};
K>        double q[] = {2.56852019228982242e00, 1.87295284992346047e00, 5.27905102951428412e-1,
K>                      6.05183413124413191e-2, 2.33520497626869185e-3};
K>        z = 1 / (y * y);
K>        xnum = p[5] * z;
K>        xden = z;
K>        for (i=0; i<4; i++)
K>        {
K>           xnum = (xnum + p[i]) * z;
K>           xden = (xden + q[i]) * z;
K>        }
K>        result = z * (xnum + p[4]) / (xden + q[4]);
K>        result = (1/sqrt(pi) -  result) / y;
K>        z = ((int)(y*16))/16.0;
K>        del = (y-z) * (y+z);
K>        result *= exp(-z*z-del);
K>    }

K>//   fix up for negative argument, erf, etc.
K>    if (x > xbreak)
K>       result = 1 - result;
K>    if (x < -xbreak)
K>       result = result - 1;

K>    return result;
K>}

K>



СУПЕР!!! ОГРОМНОЕ СПАСИБО!!!
Re[2]: Erf(x), Erfc(x), вычисления интеграла...
От: Аноним  
Дата: 22.03.06 09:57
Оценка:
K>double erf(double x)

А случайно erfc(x) нигде не заволялось?!
Re[3]: Erf(x), Erfc(x), вычисления интеграла...
От: MBo  
Дата: 22.03.06 10:44
Оценка:
Здравствуйте, Аноним, Вы писали:


K>>double erf(double x)


А>А случайно erfc(x) нигде не заволялось?!


Из единицы erf вычти
Re[4]: Erf(x), Erfc(x), вычисления интеграла...
От: Аноним  
Дата: 22.03.06 11:57
Оценка:
Re[2]: Erf(x), Erfc(x), вычисления интеграла...
От: busybox  
Дата: 28.04.06 11:23
Оценка:
Здравствуйте, kfmn, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Подскажите пожалуйста как в Windows реализовать данныу функцию, а именно интересует ERFC(x) :

А>>вычисление интеграла вероятности ошибки и дополнения к нему

K>Надо было в свое время — перевел MATLABовский исходник на C (сделано через дробно-рациональные аппроксимации на нескольких отрезках):


А кто-нито точность проверял по каким нибудь контрольным точкам?
У меня например для x=0.99999999 получается 0.842701. Можно этому верить?
Re[3]: Erf(x), Erfc(x), вычисления интеграла...
От: Аноним  
Дата: 02.05.06 05:42
Оценка:
Здравствуйте, busybox, Вы писали:

B>Здравствуйте, kfmn, Вы писали:


K>>Здравствуйте, Аноним, Вы писали:


А>>>Подскажите пожалуйста как в Windows реализовать данныу функцию, а именно интересует ERFC(x) :

А>>>вычисление интеграла вероятности ошибки и дополнения к нему

K>>Надо было в свое время — перевел MATLABовский исходник на C (сделано через дробно-рациональные аппроксимации на нескольких отрезках):


B>А кто-нито точность проверял по каким нибудь контрольным точкам?

B>У меня например для x=0.99999999 получается 0.842701. Можно этому верить?


Я проверял данный модуль!! Прога кот. требовала данную бибду РАБОТАЕТ КОРРЕКТНО!!!
Re[3]: Erf(x), Erfc(x), вычисления интеграла...
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.05.06 07:00
Оценка:
Здравствуйте, busybox, Вы писали:

B>А кто-нито точность проверял по каким нибудь контрольным точкам?

B>У меня например для x=0.99999999 получается 0.842701. Можно этому верить?
А почему бы тебе не взять какие-нибудь таблички? Вот, например: http://ceeweb.egr.duke.edu/~medina/CE123/Table_Erf.pdf.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Erf(x), Erfc(x), вычисления интеграла...
От: busybox  
Дата: 05.05.06 10:54
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, busybox, Вы писали:


B>>А кто-нито точность проверял по каким нибудь контрольным точкам?

B>>У меня например для x=0.99999999 получается 0.842701. Можно этому верить?
S>А почему бы тебе не взять какие-нибудь таблички? Вот, например: http://ceeweb.egr.duke.edu/~medina/CE123/Table_Erf.pdf.

Оки! Спасибо!
Re: Erf(x), Erfc(x), вычисления интеграла...
От: StatujaLeha на правах ИМХО
Дата: 08.05.06 18:28
Оценка:
Здравствуйте, <Аноним>, Вы писали:

В Intel Math Kernel Library есть такая.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.