Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.24 KB | None | 0 0
  1.  
  2. """
  3. Bibliotecas
  4. """
  5. #importa a função special da biblioteca scipy
  6. from scipy import special
  7. #importa funções de geração de gráficos
  8. import matplotlib.pyplot as plt
  9. #importa uma biblioteca de funções matemáticas
  10. import numpy as np
  11. #importa a funcao integral
  12. from scipy.integrate import quad as integrate
  13.  
  14. """
  15. Geradores
  16. """
  17.  
  18. def gen_z(linspace):
  19.     """
  20.    Gera valores para z, com eficiencia de memoria, afim de calcular o valor da negentropia para esses valores
  21.    """
  22.     z = np.linspace(0,125.7/100,linspace)
  23.     for number in z:
  24.         yield number
  25.  
  26. """
  27. Definição de Constantes
  28. """
  29.  
  30. def get_par():
  31.     """
  32.    Dá parâmetros do feixe de airy para funções de integrais
  33.    """
  34.     x0 = 100*10**(-6)
  35.     l0 = 500*10**(-9)
  36.     k = 2*np.pi/l0
  37.     q = z/(k*(x0**2))
  38.     a = 0.1
  39.     return x0, q, a
  40.  
  41. """
  42. Definição de Limites
  43. """
  44. def int_limit():
  45.     """
  46.    Limites para as integrais
  47.    """
  48.     return 5*10**(-3)
  49.  
  50.  
  51. """
  52. Integradores
  53. """
  54.  
  55. def campo_abs_sqr(x):
  56.     """
  57.    Módulo quadrado do campo
  58.    """
  59.     x0, q, a = get_par()
  60.     return abs(special.airy(x/x0 -(q/2)**2 + (a*q)*1j)[0]*np.exp(a*x/x0 + -a*(q**2)/2 + (q**3)/12*-1j + (a**2)*q/2*1j + (x/x0*q/2)*1j))**2
  61.  
  62. def xp(x):
  63.     """
  64.    Função x.p(x)
  65.    """
  66.     return (1/kn)*x*campo_abs_sqr(x)
  67.  
  68. def desvio_padrao(x):
  69.     return ((x-mi)**2/kn)*campo_abs_sqr(x)
  70.  
  71. def entropia_funcao(x):
  72.     return (1/kn)*campo_abs_sqr(x)*np.log((1/kn)*campo_abs_sqr(x))
  73.  
  74.  
  75. """
  76. Negentropia em Função de Z
  77. """
  78. linspace = 100
  79.  
  80. def neg_vs_z():
  81.     """
  82.    Calcula a Negentropia em função de Z
  83.    """
  84.     neg = []
  85.     for value in gen_z(linspace):
  86.         global z
  87.         z = value
  88.         global kn
  89.         kn = integrate(campo_abs_sqr,-int_limit(),int_limit())[0]
  90.         global mi
  91.         mi = integrate(xp, -int_limit(), int_limit())[0]
  92.         dp = integrate(desvio_padrao, -int_limit(), int_limit())[0]
  93.         dp = np.sqrt(dp)
  94.         entG = np.log(dp*np.sqrt(2*np.pi*np.exp(1)))
  95.         entF = -integrate(entropia_funcao,-int_limit(), int_limit())[0]
  96.         neg.append(entG-entF)
  97.     return neg
  98.    
  99. plt.plot(np.linspace(-int_limit(),int_limit(),linspace),neg_vs_z())
  100. plt.ylabel('Negentropia')
  101. plt.xlabel('z(m)')
  102. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement