【问题标题】:Convert an equation to Python将方程转换为 Python
【发布时间】:2018-12-19 02:24:20
【问题描述】:

我有几个方程式,需要将其转换为 Python。问题是我试图根据方程式绘制图表。但是,我得到的图表与原来的不一样。

论文中MIM攻击的错误概率方程为:

第一张图片

第二张图片

PNS攻击错误概率的计算公式为:

满足区域条件的地方:

PNS 攻击的错误概率应该是这样绘制的:

我的问题:如何将方程 8.1 插入方程 8.5?

这是我根据公式 8.5 编写的 python 代码:

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()

请帮我解决这个问题。

谢谢。

【问题讨论】:

  • 你的代码语法正确吗?看起来您在该行中缺少一些括号:y = (np...
  • 我认为@Fallenreaper 的意思是,例如,该行中的分母应该是np.exp(x) - 1?目前它与您在 TeX 版本的方程式 8.5 中显示的内容不匹配。
  • 另外,不清楚您所说的“将8.1 插入8.5”是什么意思。这两个 eq 没有​​任何共同的术语,至少在 8.5 的最终简化形式中没有。
  • 试试这个 StackExchange:math.stackexchange.com
  • sympy 甚至可能会有所帮助,如果您的方程式可以用它的语法编写

标签: python matplotlib scipy equation


【解决方案1】:

我通过使用图像中给出的公式计算 N1 和 N2 的 y 来更新您的代码。这给了我 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()

【讨论】:

  • 是的。我同意你的看法。 f : y1,y2 -> y1+y2 的方程类似于提供的图表。
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多