私は数値解析のための私のコードを改善するために、私の検索では、次のコードを見つけました:このRK4 ODEソルバでは、内側のラムダが外側のラムダfuctionをどのように使用しますか? Pythonの
今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)
、プログラムが正常に動作し、プログラムの全体的なアルゴリズムを見ることができます。しかし、私はラムダネストがどのように機能するのか理解できません。私が正しく理解していれば、RK4
のdyN
は、このODE解決方法に必要なときに内部で定義されている関数です。しかし、私は内側のラムダがどのように外側のラムダを使用しているのか分かりません。おそらく私はラムダ構文を正しく理解していないでしょう。
[Understanding Python lambdas](https://stackoverflow.com/questions/32928543/understanding-python-lambdas)の可能な複製 – LutzL