Exercise 7
Exercise 7
import numpy as np
import matplotlib.pyplot as plt
for i in range(n_steps):
t_n = t_values[i]
y_n = y_values[i]
k1 = f(t_n, y_n)
k2 = f(t_n + h/2, y_n + h/2 * k1)
k3 = f(t_n + h/2, y_n + h/2 * k2)
k4 = f(t_n + h, y_n + h * k3)
y0 = 1 # initial
t0 = 0 # start
t_end = 2 # end
h = 0.1 # step
def analytic_solution(t):
return np.exp(-t**2)
y_exact = analytic_solution(t_values)
for h in h_values:
error = compute_error(f, y0, t0, t_end, h)
errors.append(error)
Oppgave 2A)
f = lambda t, y: 2 / t * y
t0, tend = 1, 2
y0 = 1
N = 10
h = (tend - t0) / N
y = np.zeros(N + 1)
t = np.zeros(N + 1)
y[0] = y0
t[0] = t0
for n in range(N):
k1 = f(t[n], y[n])
k2 = f(t[n] + 0.5 * h, y[n] + 0.5 * h * k1)
k3 = f(t[n] + 0.75 * h, y[n] + 0.75 * h * k2)
y[n + 1] = y[n] + h * (2 * k1 + 3 * k2 + 4 * k3) / 9
t[n + 1] = t[n] + h
print('t =', t)
print('y =', y)
t = [1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. ]
y = [1. 1.20996678 1.43993271 1.6898975 1.95986092 2.24982281
2.55978304 2.88974151 3.23969813 3.60965285 3.99960561]
Oppgave 2B) Koden løser en Første orden ODE = y'(t)=2/t * y(t), y(1) = 1
Oppgave 2D)
f = lambda t, y: 2 / t * y
t0, tend = 1, 2
y0 = 1
N = 10
h = (tend - t0) / N
y = np.zeros(N + 1)
t = np.zeros(N + 1)
y[0] = y0
t[0] = t0
k1 = f(t[0], y[0])
k2 = f(t[0] + 0.5 * h, y[0] + 0.5 * h * k1)
k3 = f(t[0] + 0.75 * h, y[0] + 0.75 * h * k2)
y[1] = y[0] + h * (2 * k1 + 3 * k2 + 4 * k3) / 9
array([1. , 1.20996678])
Oppgave 4 C)
k1 = 100
k2 = 200
m1 = 10
m2 = 5
y0 = [0, 1, 0, 1]
t0 = 0
t_end = 3
# Euler's method
t_euler, y_euler = euler_method(f, t0, y0, h, steps)
# Heun's method
t_heun, y_heun = heun_method(f, t0, y0, h, steps)
# Euler's method
t_euler, y_euler = euler_method(f, t0, y0, h, steps)
E_euler = compute_energy(y_euler, k1, k2, m1, m2)
# Heun's method
t_heun, y_heun = heun_method(f, t0, y0, h, steps)
E_heun = compute_energy(y_heun, k1, k2, m1, m2)