В этом примере показано, как получить точные значения для биномиальных коэффициентов и найти вероятности в экспериментах по подбрасыванию монет с помощью инструментария символьной математики.

Определите символическую функцию, P(n,k), что вычисляет вероятность того, что головы подойдут точно k тайм-аут из n бросает.
syms P(n,k)
P(n,k) = nchoosek(n,k)/2^nP(n, k) =
Предположим, вы бросаете монету 2000 раз. Вероятность того, что головы всплывут в половине бросков P(n, n/2), где n = 2000. Результатом является рациональное выражение с большими числами как в числителе, так и в знаменателе. Символьный набор математических инструментов возвращает точный результат.
n = 2000; central = P(n, n/2)
central =
Аппроксимировать это рациональное число с 10-значной точностью с помощью digits и vpa.
previous_digits = digits(10); vpa(central)
ans =
Вычислите вероятность того, что количество «головок» отличается от ожидаемого значения не более чем на два стандартных отклонения.
sigma = sqrt(n/4); withinTwoSigma = symsum(P(n, k), k, ceil(n/2 - 2*sigma), floor(n/2 + 2*sigma))
withinTwoSigma =
Аппроксимировать результат числом с плавающей запятой.
vpa(withinTwoSigma)
ans =
Сравните этот результат со следующими двумя оценками, полученными из кумулятивной функции распределения (cdf) нормального распределения. Оказывается, что взятие медианы между первым целым снаружи и первым целым внутри интервала двух сигм даёт более точный результат, чем использование самого интервала двух сигм.
syms cdf(x)
cdf(x) = 1/2 * (1 + erf((x - n/2)/sqrt(sym(n/2))))cdf(x) =
estimate1 = vpa(cdf(n/2 + 2*sigma) - cdf(n/2 - 2*sigma))
estimate1 =
estimate2 = vpa(cdf(floor(n/2 + 2*sigma) + 1/2) - ...
cdf(ceil(n/2 - 2*sigma) - 1/2))estimate2 =
error1 = vpa(estimate1 - withinTwoSigma)
error1 =
error2 = vpa(estimate2 - withinTwoSigma)
error2 =
Восстановление точности по умолчанию для вычислений с плавающей запятой.
digits(previous_digits);
Постройте график этого распределения для k в пределах 2λ-интервала. График представляет собой гауссову кривую.
k = n/2 + (-2*sigma:2*sigma); plot(k, P(n,k), '-+'); title('2000 coin tosses'); xlabel('Number of heads'); ylabel('Probability');
