Преобразовать уравнение в Python - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть несколько уравнений, и мне нужно преобразовать его в Python.Проблема в том, что я попытался построить график в соответствии с уравнением.Однако график, который я получаю, не совпадает с исходным.

В статье уравнение вероятности ошибки для атаки MIM дается:

Первое изображение

Screen Shot

Второе изображение

Screen Shot

Уравнение для расчета вероятности ошибки атаки PNS определяется по формуле:

Screen Shot

Где удовлетворяется условие региона:

Screen Shot

Вероятность ошибки атаки PNS должна быть представлена ​​следующим образом:

screen Shot

Мой вопрос: Как вставить уравнение 8.1 в уравнение 8.5?

Это мой код Python в соответствии с уравнением 8.5:

import matplotlib.pyplot as plt
import math
import numpy as np
from scipy.special import iv,modstruve


x=[0, 5, 10, 15, 20]
t= 0.9
x = np.array(x)
y = (np.exp(x*t/2)*(iv(0, x*t/2) - modstruve(0,x*t/2))-1)/(np.exp(x*t/2-1))                                            

plt.plot(x, y, label='Normal')
plt.xlabel('Mean photon number N')
plt.ylabel('Error probabiity')
plt.scatter(x,y)
plt.title('N/2')
plt.ylim([0, 0.5])
plt.legend()
plt.show()

Пожалуйста, помогите мне в этом вопросе.

Спасибо.

1 Ответ

0 голосов
/ 04 января 2019

Я обновил ваш код, вычислив y для N1 и для N2 по формуле, приведенной на рисунке.Это дает мне y1 и y2, которые, как я считаю, являются компонентами нарисованной функции f (y1, y2).Тем не менее, без остальной части статьи я не могу точно определить, что нарисовано на предоставленном вами изображении.

Следующий код создает изображение, очень похожее на f : y1,y2 -> y1+y2:

import matplotlib.pyplot as plt
import numpy as np
from scipy.special import iv, modstruve

x = range(0, 20, 1)
# t= 0.1
for t, color in zip([0.9, 0.1, 0.5], ['b', 'g', 'r']):
    x1 = (1 - t) * np.array(x)
    y1 = (np.exp(x1 / 2) * (iv(0, x1 / 2) - modstruve(0, x1 / 2)) - 1) / (np.exp(x1) - 1)
    x2 = (1 - t) * t * np.array(x)
    y2 = (np.exp(x2 / 2) * (iv(0, x2 / 2) - modstruve(0, x2 / 2)) - 1) / (np.exp(x2) - 1)

    y = y1 + y2

    plt.plot(x, y, label=t, color=color)
    plt.scatter(x, y, color=color)

# N1 = N2
x1 = np.array(x) / 2
y1 = (np.exp(x1 / 2) * (iv(0, x1 / 2) - modstruve(0, x1 / 2)) - 1) / (np.exp(x1) - 1)
x2 = np.array(x) / 2
y2 = (np.exp(x2 / 2) * (iv(0, x2 / 2) - modstruve(0, x2 / 2)) - 1) / (np.exp(x2) - 1)
y = y1 + y2
plt.plot(x, y, label="N1=N2=N/2", color='k')
plt.scatter(x, y, color='k')

plt.xlabel('Mean photon number N')
plt.ylabel('Error probabiity')
plt.title('N/2')
plt.ylim([0, 0.35])
plt.legend()
plt.show()

enter image description here

...