【发布时间】:2017-11-02 01:47:18
【问题描述】:
我在搜索中发现了以下代码来改进我的数值分析代码:
from math import sqrt
def RK4(f):
return lambda t, y, dt: (
lambda dy1: (
lambda dy2: (
lambda dy3: (
lambda dy4: (dy1 + 2 * dy2 + 2 * dy3 + dy4) / 6
)(dt * f(t + dt, y + dy3))
)(dt * f(t + dt / 2, y + dy2 / 2))
)(dt * f(t + dt / 2, y + dy1 / 2))
)(dt * f(t, y))
def theory(t):
return (t**2 + 4)**2 / 16
dy = RK4(lambda t, y: t * sqrt(y))
t, y, dt = 0., 1., .1
while t <= 10:
if abs(round(t) - t) < 1e-5:
print("y(%2.1f)\t= %4.6f \t error: %4.6g" % (t, y, abs(y - theory(t))))
t, y = t + dt, y + dy(t, y, dt)
现在,程序运行良好,可以看到程序的整体算法。但我不明白 lambda 嵌套是如何工作的。如果我理解正确,RK4 中的所有dyN 都是在内部定义的函数,因为它们是这种 ODE 求解方法所必需的。但我不知道内部 lambda 在其定义中如何使用外部 lambda。也许我没有正确理解 lambda 语法。
【问题讨论】:
标签: python python-3.x lambda ode nested-function