将一组函数作为参数传递给Python中的另一个函数

时间:2012-03-08 19:31:10

标签: python

我想在Python中实现我自己的基本Runge-Kutta 4集成器。格式应该是这样的:

---- EXAMPLE set of equations ----
f1 = lambda x: x**2
f2 = lambda y: y**2
.
.
.
fn = lambda n: n**2
f = [f1, f2, f3, ... , fn]

result = integrate(f, other arguments [e.g. stepsize etc.])

---- result should be of format ----
result = [result1 result2 result3 ... resultn]

所以基本上我希望能够定义一组三个运动方程,并能够将它们传递给函数并访问它们来操作该函数内的这些方程。怎么可能?

理想情况下,我希望得到类似于Matlabs ode45函数的东西,例如可以调用如下:

% ---- file 1 ---- %
function xp=F(t,x)
xp=zeros(2,1);
xp(1)=x(2);
xp(2)=-t*x(1)+exp(t)*x(2)+3*sin(2*t); 

% ---- file 2 ---- %
[t,x]=ode45(’file 1’,[t0,tf],[x10,x20]);

% where t0 tf initial and final values of t
% x10 x20 initial values of x

注1:
我已经查看了SciPy中dopri5的来源,但它是用C语言实现的,而且远远超出了我的目的。

注2:
如果我上面写的内容根本不清楚,请告诉我,

1 个答案:

答案 0 :(得分:2)

免责声明:Python不是为编写这种低级数字而设计的。它当然擅长管理它 - numpy是一个专门用于处理大型数字数据集并在其上进行这样计算的模块 - 但实际的数字运算是在低级别完成的C或Fortran的速度。编写自己的集成器是一个有趣的学习练习,但它不会教你如何正常使用Python。那说:


你可以完全按照你的要求去做。

>>> def integrate(fs):
...     print fs[0](1)
... 
>>> f1 = lambda x: x**2
>>> f2 = lambda x: x**3
>>> 
>>> fs = (f1, f2)
>>> 
>>> integrate(fs)
1

这是有道理的,因为functions are first-class objects in Python