我是 Julia 编程语言的新手,所以我不太了解如何优化代码。我听说 Julia 与 Python 相比应该更快,但我编写了一个简单的Julia 代码来解决 FitzHugh–Nagumo 模型,它似乎并不比 Python 快。
FitzHugh–Nagumo 模型方程为:
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
其中u
和v
是变量,是二维字段(即二维数组),a0,a1,d,eps
是模型的参数。参数和变量都是浮点类型。dx
是控制网格点之间分离的参数,用于拉普拉斯函数,它是具有周期性边界条件的有限差分的实现。
如果你们中的一位 Julia 编码专家可以给我一个提示,告诉我如何在 Julia 中做得更好,我会很高兴听到。
龙格-库特阶跃函数为:
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
我使用了 PyPlot 包中的 imshow() 来绘制 u 字段。