fork download
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from neurodiffeq import diff
  4. from neurodiffeq.solvers import Solver1D
  5. from neurodiffeq.conditions import DirichletBVP
  6. from neurodiffeq.networks import FCNN, SinActv
  7.  
  8.  
  9. def ode_system(Cplus, Cminus, Ca, Phi, y):
  10. dCplus_dy = diff(Cplus, y)
  11. dCminus_dy = diff(Cminus, y)
  12. dCa_dy = diff(Ca, y)
  13. dPhi_dy = diff(Phi, y)
  14.  
  15. d2Cplus_dy2 = diff(dCplus_dy, y)
  16. d2Cminus_dy2 = diff(dCminus_dy, y)
  17. d2Ca_dy2 = diff(dCa_dy, y)
  18. d2Phi_dy2 = diff(dPhi_dy, y)
  19.  
  20. eq1 = -V0 * dCplus_dy - diff(Cplus * dPhi_dy, y) - d2Cplus_dy2
  21. eq2 = -V0 * dCminus_dy - diff(-Cminus * dPhi_dy, y) - d2Cminus_dy2
  22. eq3 = -ALPHA * V0 * dCa_dy - diff(-ZA * Ca * dPhi_dy, y) - d2Ca_dy2
  23. eq4 = NU * d2Phi_dy2 - (Cplus - Cminus - ZA * Ca)
  24.  
  25. return [eq1, eq2, eq3, eq4]
  26.  
  27.  
  28. def _boundary_cond(DELTA_V):
  29. cond_a = DirichletBVP(t_0=0, u_0=P, t_1=1, u_1=1.0)
  30. cond_b = DirichletBVP(t_0=0, u_0=0.0, t_1=1, u_1=0.0)
  31. cond_c = DirichletBVP(t_0=0, u_0=0.0, t_1=1, u_1=0.0)
  32. cond_d = DirichletBVP(t_0=0, u_0=0.0, t_1=1, u_1=DELTA_V)
  33. return [cond_a, cond_b, cond_c, cond_d]
  34.  
  35.  
  36. N = 500
  37. V0 = 50.0
  38. NU = 1e-4
  39. DELTA_V = 10.0
  40. ZA = 1.0
  41. ALPHA = 1.0
  42. CA0 = 1e-2
  43. P = 1.0
  44.  
  45. nets = [FCNN(hidden_units=(32, 32), actv=SinActv) for _ in range(4)]
  46. solver = Solver1D(ode_system, _boundary_cond(DELTA_V), t_min=0.0, t_max=1.0, nets=nets)
  47. solver.fit(max_epochs=N)
  48. solution = solver.get_solution()
  49.  
  50. t = np.linspace(0.0, 1.0, N)
  51. Cplus, Cminus, Ca, Phi = solution(t, to_numpy=True)
  52.  
  53. fig, axs = plt.subplots(1, 2)
  54. axs[0].plot(t, Cplus, label="C+")
  55. axs[0].plot(t, Cminus, label="C-")
  56. axs[0].plot(t, Ca, label="Ca")
  57. axs[1].plot(t, Phi, label='Phi')
  58. axs[0].legend()
  59. axs[1].legend()
  60. plt.show()
  61.  
Runtime error #stdin #stdout #stderr 0.62s 54832KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "prog.py", line 3, in <module>
ImportError: No module named neurodiffeq