Формула у функции НОРМСТРАСП в Excel, какая?

Нeобходимо вычленить формулу из функции "НОРМСТРАСП" в виде текста, чтоб можно было воспользоваться ей в калькуляторе степеней (условно) и для последующего использования в программном коде на языке программирования Python. Формула строит стандартное нормальное интегральное распределение для передаваемого значения.

Попробовал вычленить согласно формуле, описанной на сайте Microsoft, но почему-то значения не совпадают.

Вот преобразованная в текст формула, которая у меня получилась:

(1/sqrt(2*pi))*exp(-1*((z*z)/2))

Если вместо z подставить 1.33333, то должно получиться 0.908788234, но почему-то значение получается другое


Ответы (2 шт):

Автор решения: Сергей

Microsoft не писал, что это формула и заложена в НОРМСТРАСП:-) Он вам уравнение плотности стандартного нормального распределения привёл, формулу которого и вы тут приводите, а вот считает НОРМСТРАСП функцию нормального распределения.

Вам нужно от этой радости теперь взять интеграл. Вот вам в помощь ссылка: https://smart-lab.ru/blog/213739.php, там ещё ряд ссылочек внутри на коды.

(Сразу почувствовал, что формула странновата, но минут 40 убил, чтобы вспомнить, почему, да поискать подтверждение:-))

→ Ссылка
Автор решения: Александр М

По рекомендации Сергея, получилось разобраться в данном вопросе. Функция для Python получилась следующая:

from math import exp
def normsdist2(z):

    # Защита от переполнения
    if (z > 6.0):
        return 1.0
    elif (z < -6.0):
        return 0.0

    b1 = 0.31938153
    b2 = -0.356563782
    b3 = 1.781477937
    b4 = -1.821255978
    b5 = 1.330274429
    p = 0.2316419
    c2 = 0.3989423

    a=abs(z)
    t = 1.0/(1.0+a*p)
    b = c2*exp((-z)*(z/2.0))
    n = ((((b5*t+b4)*t+b3)*t+b2)*t+b1)*t
    n = 1.0-b*n
    if (z < 0.0):
        n = 1.0-n
    return n

Хотя вариант Fat-Zer даёт более точный результат и имеет компактный вид:

from math import erf,sqrt
def normsdist2(z):
    return (1.0+erf(z/sqrt(2.0)))/2.0
→ Ссылка