Python中如何合并积分方程?
How to combine integration equation in Python?
我通过对从 0 到 1 的所有可能的 eta 积分 R(eta) 来计算关键速率 (R^Rate-wise),概率分布 (PDTC) 是对数正态分布。
对数正态分布方程:
R(eta)的方程:
因此,R^Rate-wise = Integrate_0^1(R(eta)*P(eta)*deta):
这是Python对数正态分布的代码:
x=np.linspace(0,1,1000)
sigma0=[0.9]
color=['green']
for i in range(len(sigma0)):
sigma=sigma0[i]
y=1/(x*sigma*np.sqrt(2*np.pi))*np.exp(-(np.log(x/0.3)+(1/2*sigma*sigma))**2/(2*sigma*sigma))
plt.plot(x,y,color[i])
plt.title('Lognormal distribution')
plt.xlabel('x')
plt.ylabel('lognormal density distribution')
#plt.xlim((0,0.002))
plt.ylim((0,5))
plt.show()
这是 R(eta) 的 Python 代码:
n1=np.arange(10, 55, 1)
n=10**(-n1/10)
Y0=1*(10**-5)
nd=0.25
ed=0.03
nsys=nd*n
QBER=((1/2*Y0)+(ed*nsys))/(Y0+nsys)
H2=-QBER*np.log2(QBER)-(1-QBER)*np.log2(1-QBER)
Rsp=np.log10((Y0+nsys)*(1-(2*H2)))
print (Rsp)
plt.plot(n1,Rsp)
plt.xlabel('Loss (dB)')
plt.ylabel('log10(Rate)')
plt.show()
我的问题是如何对从 0 到 1 的可能 eta 积分 R(eta)?输出应该如下图所示(R^Rate-wise):
可以在link中找到参考文章:https://arxiv.org/pdf/1712.08949.pdf
我不明白你试图整合的 eta 值的范围是什么,所以我选择了 x = np.linspace(0,2,1000)
并稍微组织了代码以使其适合 scipy.integrate.quad
。
x=np.linspace(0,2,1000)
def log_normal(x,sigma):
y=1/(x*sigma*np.sqrt(2*np.pi))*np.exp(-(np.log(x/0.3)+(1/2*sigma*sigma))**2/(2*sigma*sigma))
return y
def R(x,nd,Y0,ed):
nsys = x*nd
QBER=((1/2*Y0)+(ed*nsys))/(Y0+nsys)
H2=-QBER*np.log2(QBER)-(1-QBER)*np.log2(1-QBER)
out = (Y0+nsys)*(1-(2*H2))
return out
def out(x,nd,Y0,ed,sigma):
term1 = log_normal(x,sigma)
term2 = R(x,nd,Y0,ed)
return term1*term2
hyp = (0.25,1*(10**-5), 0.03,0.9) #nd,Y0,ed,sigma
lg = log_normal(x[1:],hyp[3])
r = R(x[1:],hyp[0],hyp[1],hyp[2])
plt.plot(lg,label = "log_normal sigma = 0.9")
plt.plot(r,label = "R")
plt.legend()
plt.show()
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.9) ),label = "sigma = 0.9" )
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.3) ) ,label = "sigma = 0.3")
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.6) ) ,label = "sigma = 0.6")
#plt.xlim((0,50))
#plt.ylim((-10,0))
plt.title("Rate")
plt.legend()
plt.show()
现在我们可以整合出去了。
from scipy.integrate import quad
sol = quad(out,a = 0,b =1 ,args=hyp)
sol
#(0.03721392434457473, 1.9175746760101603e-10)
我通过对从 0 到 1 的所有可能的 eta 积分 R(eta) 来计算关键速率 (R^Rate-wise),概率分布 (PDTC) 是对数正态分布。
对数正态分布方程:
R(eta)的方程:
因此,R^Rate-wise = Integrate_0^1(R(eta)*P(eta)*deta):
这是Python对数正态分布的代码:
x=np.linspace(0,1,1000)
sigma0=[0.9]
color=['green']
for i in range(len(sigma0)):
sigma=sigma0[i]
y=1/(x*sigma*np.sqrt(2*np.pi))*np.exp(-(np.log(x/0.3)+(1/2*sigma*sigma))**2/(2*sigma*sigma))
plt.plot(x,y,color[i])
plt.title('Lognormal distribution')
plt.xlabel('x')
plt.ylabel('lognormal density distribution')
#plt.xlim((0,0.002))
plt.ylim((0,5))
plt.show()
这是 R(eta) 的 Python 代码:
n1=np.arange(10, 55, 1)
n=10**(-n1/10)
Y0=1*(10**-5)
nd=0.25
ed=0.03
nsys=nd*n
QBER=((1/2*Y0)+(ed*nsys))/(Y0+nsys)
H2=-QBER*np.log2(QBER)-(1-QBER)*np.log2(1-QBER)
Rsp=np.log10((Y0+nsys)*(1-(2*H2)))
print (Rsp)
plt.plot(n1,Rsp)
plt.xlabel('Loss (dB)')
plt.ylabel('log10(Rate)')
plt.show()
我的问题是如何对从 0 到 1 的可能 eta 积分 R(eta)?输出应该如下图所示(R^Rate-wise):
可以在link中找到参考文章:https://arxiv.org/pdf/1712.08949.pdf
我不明白你试图整合的 eta 值的范围是什么,所以我选择了 x = np.linspace(0,2,1000)
并稍微组织了代码以使其适合 scipy.integrate.quad
。
x=np.linspace(0,2,1000)
def log_normal(x,sigma):
y=1/(x*sigma*np.sqrt(2*np.pi))*np.exp(-(np.log(x/0.3)+(1/2*sigma*sigma))**2/(2*sigma*sigma))
return y
def R(x,nd,Y0,ed):
nsys = x*nd
QBER=((1/2*Y0)+(ed*nsys))/(Y0+nsys)
H2=-QBER*np.log2(QBER)-(1-QBER)*np.log2(1-QBER)
out = (Y0+nsys)*(1-(2*H2))
return out
def out(x,nd,Y0,ed,sigma):
term1 = log_normal(x,sigma)
term2 = R(x,nd,Y0,ed)
return term1*term2
hyp = (0.25,1*(10**-5), 0.03,0.9) #nd,Y0,ed,sigma
lg = log_normal(x[1:],hyp[3])
r = R(x[1:],hyp[0],hyp[1],hyp[2])
plt.plot(lg,label = "log_normal sigma = 0.9")
plt.plot(r,label = "R")
plt.legend()
plt.show()
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.9) ),label = "sigma = 0.9" )
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.3) ) ,label = "sigma = 0.3")
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.6) ) ,label = "sigma = 0.6")
#plt.xlim((0,50))
#plt.ylim((-10,0))
plt.title("Rate")
plt.legend()
plt.show()
现在我们可以整合出去了。
from scipy.integrate import quad
sol = quad(out,a = 0,b =1 ,args=hyp)
sol
#(0.03721392434457473, 1.9175746760101603e-10)