나는 수치 분석을 위해 내 코드를 개선하기 위해 내 검색에 다음 코드를 발견이 RK4 ODE-solver에서 내부 람다는 외부 람다 펑션을 어떻게 사용합니까? 파이썬
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