python函数传地址_如何在Python中将函数传递给函数?

I am a beginner/intermediate in Python. I have coded a 4th-order Runge-Kutta method (RK4) into Python. It is basically solving a pendulum, but that is not the point here.

I want to improve the RK4 method in the following way: I want to be able to pass the function f directly to the RK4 function, i.e. RK4(y_0, n, h) should become RK4(f,y_0,n,h). This would have the great advantage that I could use RK4 for other f functions that describe other systems, not just this one pendulum.

I have played around with just passing simple functions to RK4, but I am doing something wrong. How do I do this in Python?

import numpy as np

def RK4(y_0, n, h):

#4th order Runge-Kutta solver, takes as input

#initial value y_0, the number of steps n and stepsize h

#returns solution vector y and time vector t

#right now function f is defined below

t = np.linspace(0,n*h,n,endpoint = False) #create time vector t

y = np.zeros((n,len(y_0))) #create solution vector y

y[0] = y_0 #assign initial value to first position in y

for i in range(0,n-1):

#compute Runge-Kutta weights k_1 till k_4

k_1 = f(t[i],y[i])

k_2 = f(t[i] + 0.5*h, y[i] + 0.5*h*k_1)

k_3 = f(t[i] + 0.5*h, y[i] + 0.5*h*k_2)

k_4 = f(t[i] + 0.5*h, y[i] + h*k_3)

#compute next y

y[i+1] = y[i] + h / 6. * (k_1 + 2.*k_2 + 2.*k_3 + k_4)

return t,y

def f(t,vec):

theta=vec[0]

omega = vec[1]

omegaDot = -np.sin(theta) - omega + np.cos(t)

result = np.array([omega,omegaDot])

return result

test = np.array([0,0.5])

t,y = RK4(test,10,0.1)

解决方案

Python functions are objects too. You can pass them around like any other object:

>>> def foo(): print 'Hello world!'

...

>>> foo

>>> foo()

Hello world!

>>> bar = foo

>>> bar()

Hello world!

Simply pass a function as an extra parameter to your RK4 function and use that as a local variable.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值