首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效地将函数用作参数

有效地将函数用作参数
EN

Stack Overflow用户
提问于 2016-06-27 01:08:41
回答 1查看 572关注 0票数 2

我想用Julia语言实现一个通用的Runge-Kutta步长函数。在Python中,我可以只传递一个函数作为这个RK4函数作为输入获取的参数之一。如果我在Julia中这样做,会有性能损失吗?

我的函数如下所示:

代码语言:javascript
复制
function uv_rk4_step(rhs,Vs,Ps)
  Vs_k1 = rhs(Vs,Ps)
  Vs_k1 = Ps.dt*Vs_k1
  Vs_k2 = rhs((Vs+(1/2)*Vs_k1),Ps)
  Vs_k2 = Ps.dt*Vs_k2
  Vs_k3 = rhs((Vs+(1/2)*Vs_k2),Ps)
  Vs_k3 = Ps.dt*Vs_k3
  Vs_k4 = rhs((Vs+(1/2)*Vs_k3),Ps)
  Vs_k4 = Ps.dt*Vs_k4
  Vs_next = Vs+(1/6)*Vs_k1+(1/3)*Vs_k2+(1/3)*Vs_k3+(1/6)*Vs_k4
end

其中,Ps是具有模型参数的Julia类型,Vs是常微分方程变量的多维数组,rhs是常微分方程的右侧(部分时间导数)。

EN

回答 1

Stack Overflow用户

发布于 2016-06-27 09:38:27

执行此操作的标准方法是将函数作为参数传递。自Julia 0.5以来,使用高阶函数的速度很快。

有很多标准库函数接受函数作为参数(“高阶函数”),所以这种风格在Julia中是惯用的。例如,下面是map函数的一个方法的简单实现:

代码语言:javascript
复制
julia> mymap(f, xs) = [f(x) for x in xs]
mymap (generic function with 1 method)

julia> mymap(sin, [0, π/2, 3π/2])
3-element Array{Float64,1}:
  0.0
  1.0
 -1.0    
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38041042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档