Python How to fix the error probability plot in Python for MIM and PNS attacks?

  • Thread starter Thread starter Nur Ziadah
  • Start date Start date
  • Tags Tags
    Convert Python
Click For Summary
The discussion revolves around converting mathematical equations related to error probabilities in MIM and PNS attacks into Python code for graph plotting. The user initially faced issues with the plotted graph not matching the original equations. Specifically, they sought guidance on how to incorporate equation 8.1 into equation 8.5. The provided Python code, which utilizes libraries like Matplotlib and SciPy, was corrected for a misplaced parenthesis, improving the graph's accuracy. However, a runtime error occurred when x=0, leading to a division by zero issue. Despite this, the corrected code produced a graph that resembled the intended output more closely. The user noted that the error probability at N=0 was not aligning with the original graph, indicating ongoing challenges in achieving the desired results.
Nur Ziadah
Messages
34
Reaction score
3
I have several equations and need to convert it into Python. The problem is that I tried to plot a graph according to the equation. However, the graph that I get is not the same as the original one.

In the paper, the equation of error probability for MIM attack is given by:

First Image
jlPMh.png

Second Image
h99h4.png

The equation to calculate the error probability of PNS attack is given by:
7CsYR.png

Where the region condition satisfied:
0Bxa3.png

The error probability of PNS attack should be plotted like this:
1IwAa.png

My question: How to insert equation 8.1 into equation 8.5?

This is my python code according to equation 8.5:

Python:
import matplotlib.pyplot as plt
import math
import numpy as np
from scipy.special import iv,modstruvex=[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()

Please help me regarding this matter.

Thank you.
 

Attachments

  • jlPMh.png
    jlPMh.png
    3.3 KB · Views: 1,181
  • h99h4.png
    h99h4.png
    9.7 KB · Views: 1,237
  • 7CsYR.png
    7CsYR.png
    3.9 KB · Views: 1,159
  • 0Bxa3.png
    0Bxa3.png
    1.5 KB · Views: 1,074
  • 1IwAa.png
    1IwAa.png
    18.6 KB · Views: 1,143
Technology news on Phys.org
When x=0 then N=0 hence the denominator is zero and so you are dividing zero according to the equation.

In your code, you misplaced the last paren. it should look like this:

Python:
y = (   np.exp(x*t/2) * (iv(0,x*t/2) - modstruve(0,x*t/2)) - 1   )  /  (np.exp(x*t/2) - 1)

This code now gives a runtime divide error at zero but the curve looks more like what you want.
 
Thank you so much. Finally I did plot the graph.
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 21 ·
Replies
21
Views
5K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 4 ·
Replies
4
Views
6K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
1K
  • · Replies 2 ·
Replies
2
Views
10K
  • · Replies 6 ·
Replies
6
Views
2K