Je suis débutant dans le langage de programmation Julia, donc je ne sais pas comment optimiser un code. J'ai entendu dire que Julia devrait être plus rapide par rapport à Python, mais j'ai écrit un simple Julia code for solving the FitzHugh–Nagumo model, et il ne semble pas être plus rapide que Python.Julia challange - modèle FitzHugh-Nagumo solveur PDE Runge-Kutta
les équations du modèle FitzHugh-Nagumo sont:
function FHN_equation(u,v,a0,a1,d,eps,dx)
u_t = u - u.^3 - v + laplacian(u,dx)
v_t = eps.*(u - a1 * v - a0) + d*laplacian(v,dx)
return u_t, v_t
end
où u
et v
sont des variables, qui sont des champs 2D (à savoir, 2 tableaux à une dimension), et a0,a1,d,eps
sont les paramètres du modèle. Les deux paramètres et les variables sont de type Float. dx
est le paramètre qui contrôle la séparation entre le point de grille, pour l'utilisation de la fonction laplacienne, qui est une implémentation de différences finies avec des conditions aux limites périodiques.
Si l'un de vos codeurs experts Julia peut me donner un indice sur la façon de mieux faire les choses à Julia, je serai heureux de l'entendre.
La fonction étape Runge-Kutte est:
function uv_rk4_step(Vs,Ps, dt)
u = Vs.u
v = Vs.v
a0=Ps.a0
a1=Ps.a1
d=Ps.d
eps=Ps.eps
dx=Ps.dx
du_k1, dv_k1 = FHN_equation(u,v,a0,a1,d,eps,dx)
u_k1 = dt*du_k1י
v_k1 = dt*dv_k1
du_k2, dv_k2 = FHN_equation((u+(1/2)*u_k1),(v+(1/2)*v_k1),a0,a1,d,eps,dx)
u_k2 = dt*du_k2
v_k2 = dt*dv_k2
du_k3, dv_k3 = FHN_equation((u+(1/2)*u_k2),(v+(1/2)*v_k2),a0,a1,d,eps,dx)
u_k3 = dt*du_k3
v_k3 = dt*dv_k3
du_k4, dv_k4 = FHN_equation((u+u_k3),(v+v_k3),a0,a1,d,eps,dx)
u_k4 = dt*du_k4
v_k4 = dt*dv_k4
u_next = u+(1/6)*u_k1+(1/3)*u_k2+(1/3)*u_k3+(1/6)*u_k4
v_next = v+(1/6)*v_k1+(1/3)*v_k2+(1/3)*v_k3+(1/6)*v_k4
return u_next, v_next
end
Et je l'ai utilisé imshow() du package PyPlot pour tracer le champ u.
Veuillez donner un exemple de travail minimal pouvant être exécuté. Vous devez donner la fonction laplacienne et un exemple d'appel. –
À première vue, vous devez supprimer les opérations vectorisées et les écrire comme des boucles explicites. –
@ DavidP.Sanders le code peut être téléchargé à partir du lien que j'ai donné à GitHub, et dans le fichier README j'ai écrit les lignes pour exécuter le code. – Ohm