Задача на интегрирование из теории вероятности

Численные методы на Python 3 (часть 2)
18.12.2020

(Всего голосов: 0)

Дана неотрицательная функция p(x), непрерывная на отрезке [a, b] и принимающая нулевые значения вне этого отрезка.

Дана ещё одна неотрицательная функция q(y), непрерывная на отрезке [c, d] и принимающая нулевые значения вне этого отрезка.

Мы полагаем далее, что X – непрерывная случайная величина с плотностью вероятности P ∙ p(x). Аналогично, Y – непрерывная случайная величина с плотностью вероятности Q ∙ q(y).

Требуется с помощью численного метода интегрирования высокого порядка точности вычислить с шагом по аргументу h=0,01:

 Постоянные множители X и Y, при которых  ∫a P ∙ p(x) dx = 1 и  ∫cd Q ∙ q(y) dy = 1

 Множество элементарных исходов случайной величины Z=X+Y

 Плотность вероятности суммы случайных величин Z=X+Y по формуле: f(z) = ∫-+∞  P ∙ p(x) ∙ Q ∙ q(z - x) dx, z ∈ [a + c, b + d]; 0 иначе. Пределы интегрирования станут конечными, но их следует аккуратно подобрать. 

 Также вывести график плотностей вероятности для величин X, Y, Z.

 Полную вероятность для случайной величины Z:  ∫ZminZmax  f(z) dz, сравнив в конце результат с единицей.

 

В качестве исходных данных зададим функции: p(x) = x на отрезке [a, b] = [1, 3]; q(y) = y2 на отрезке [c, d] = [0, 1].

 

Код:

import matplotlib.pyplot as plt
import numpy as np

#метод Ньютона для функций
def nyton(y, a, b, h):
    s = 0
    while round(a, 8) < b:
        s += (h / 8) * (y(a) + 3 * y(a + h / 3) + 3 * y(a + h / 1.5) + y(a + h))
        a += h
    return s

#метод трапеций для массива точек
def trapeze(X, Y):
    h = abs(X[1] - X[0])
    s = 0.0
    for i in range(X.shape[0] - 1):
        s += 0.5 * h * (Y[i] + Y[i + 1])
    return s

#функция p(x) на отрезке
a, b = 1, 3
def p(x):
    if (a <= x <= b):
        return x
    else:
        return 0

#функция q(y) на отрезке
c, d = 0, 1
def q(y):
    if (c <= y <= d):
        return y ** 2
    else:
        return 0

h = 0.01 #шаг

P = 1 / nyton(p, a, b, h)
Q = 1 / nyton(q, c, d, h)
print(P)
print(Q)

#множество элементарных исходов случайной величины Z=X+Y (в конкретных точках)
print(P * p(a) * Q * q(d))

#плотность вероятности суммы случайных величин Z=X+Y
n1 = (b - a) / h
n2 = (d - c) / h
#массив точек (количество n1 + n2 + 1), полученный разбиением отрезка [а + с, b + d]
Z = np.linspace(a + c, b + d, int(n1 + n2 + 1))
F = np.zeros(int(n1 + n2 + 1))
for i in range(F.shape[0]):
    F[i] = nyton(lambda x: P * p(x) * Q * q(Z[i] - x), a, b, h)

#графики плотностей вероятности
xi_p = np.linspace(a - 1, b + 1, int(n1 + 1))
yi_p = [p(i) for i in xi_p]
plt.plot(xi_p, yi_p)
plt.xlabel('x')
plt.ylabel('p(x)')
plt.show()

xi_q = np.linspace(c - 1, d + 1, int(n2 + 1))
yi_q = [q(i) for i in xi_q]
plt.plot(xi_q, yi_q)
plt.xlabel('y')
plt.ylabel('q(y)')
plt.show()

plt.plot(Z, F)
plt.xlabel('z')
plt.ylabel('f(z)')
plt.show()

#полная вероятность для случайной величины Z
print(trapeze(Z, F))

 

Результаты и выводы:

1) P = 0.2500000000000006, Q = 3.0112923462986156

2) Множество элементарных исходов случайной величины Z=X+Y для p(a) и q(d): 0.7528230865746558

3) -

4) Графики плотностей вероятности для величин X, Y, Z:

5) Полная вероятность для случайной величины Z:  ∫ZminZmax  f(z) dz = 1.002947741530758, с учетом погрешности = 1.


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