$$ \frac{dz(t)}{dt} = 2t \iff z(t) = t^2 $$


def ode_solve(init_z0, start_t0, end_t1, func, method='euler'):
if method == 'euler':
return apply_euler_discretization(init_z0, start_t0, end_t1, func)
else:
raise ValueError(f"Unknown method: {method}")
def apply_euler_discretization(z0, t0, t1, deriv_at_t):
n_steps = 20
step_size = (t1 - t0) / n_steps
z = z0
t = t0
z_values = [z0]
t_values = [t0]
for i in range(n_steps):
z += step_size * deriv_at_t(z, t)
t += step_size
z_values.append(z)
t_values.append(t)
return z_values, t_values
# 파라미터 설정
z0 = 1 # 초기 조건 z(0) = 1
t0 = 0 # 초기 시간 t = 0
t1 = 5 # 종단 시간 t = 5
# 결과 시각화(Euler method에 입력되는 function은 f(z, t))
z_values, t_values = apply_euler_discretization(z0, t0, t1, lambda z, t: z)
plt.plot(t_values, z_values, label="Euler Approximation", marker='o')
plt.xlabel("t")
plt.ylabel("z(t)")
plt.title("Euler Method Approximation of dz/dt = 2t <-> z = t^2")
plt.legend()
plt.grid(True)
plt.show()


$$ z_{t+1} = z_t + f(z_t, \theta) $$
$$ g(t+ h) = g_t + h \frac{dg(t)}{dt} $$