
v1 GD 는 특정 파라볼라의 analytic 미분 을 손으로 넣음. 실전에선:
h 너무 작으면 반올림 오차 (cancellation) — 보통 h = 1e-5.h 너무 크면 절단 오차 (higher-order Taylor).함수 descend_generic(f, x0, lr, max_steps, tol, h=1e-5) 를 완성하세요.
f: callable, scalar → scalar.x0: 시작점 (float).(history, x_final, converged) where converged is bool.힌트:
def grad(x):
return (f(x + h) - f(x - h)) / (2 * h)
history = [x0]; x = x0
for _ in range(max_steps):
g = grad(x)
if abs(g) <= tol:
return history, x, True
x = x - lr * g
history.append(x)
return history, x, False
| # | 이름 | 검증 |
|---|---|---|
| 1 | 반환 3-tuple | |
| 2 | 파라볼라 (x-3)² → x=3 수렴 | |
| 3 | 조기 종료: 이미 최소 → max_steps 전에 converged=True | |
| 4 | tol 매우 작을 때 max_steps 도달 → converged=False | |
| 5 | 비파라볼라 도 수렴 | |
| 6 | 중심 차분 사용 (앞차분이면 2차 정확도 실패) | 수렴 속도 체크 |
코드를 작성하고 Run 을 눌러보세요.