Problem Sheet 3 Question 7b#
The general form of the population growth differential equation
(177)#\[\begin{equation} y^{'}-y+x=0, \ \ (0 \leq x \leq 1) \end{equation}\]
with the initial condition
(178)#\[\begin{equation}y(0)=0\end{equation}\]
For h=0.2.
Midpoint method Solution#
(179)#\[\begin{equation}
\frac{w_{i+1}-w_i}{h}=f(x_i+\frac{h}{2},w_i+\frac{h}{2}f(x_i,w_i))
\end{equation}\]
Rearranging
(180)#\[\begin{equation}
w_{i+1}=w_i+hf(x_i+\frac{h}{2},w_i+\frac{h}{2}f(x_i,w_i))
\end{equation}\]
(181)#\[\begin{equation}
w_{i+1}=w_i+h(k_2)
\end{equation}\]
(182)#\[\begin{equation}
k_1=w_i-x_i+2
\end{equation}\]
(183)#\[\begin{equation}
k_2=w_i+\frac{h}{2}k_1-(x_i+\frac{h}{2})+2)
\end{equation}\]
import numpy as np
import math
%matplotlib inline
import matplotlib.pyplot as plt # side-stepping mpl backend
import matplotlib.gridspec as gridspec # subplots
import warnings
warnings.filterwarnings("ignore")
def myfun_xy(x,y):
return y-x+2
#PLOTS
def Midpoint_Question2(N,IC):
x_start=0
INTITIAL_CONDITION=IC
h=0.2
N=N+1
x=np.zeros(N)
w=np.zeros(N)
k_mat=np.zeros((2,N))
k=0
w[0]=INTITIAL_CONDITION
x[0]=x_start
for k in range (0,N-1):
k_mat[0,k]=myfun_xy(x[k],w[k])
k_mat[1,k]=myfun_xy(x[k]+h/2,w[k]+h/2*k_mat[0,k])
w[k+1]=w[k]+h*(k_mat[1,k])
x[k+1]=x[k]+h
fig = plt.figure(figsize=(10,4))
plt.plot(x,w,'-.o',color='blue')
plt.title('Numerical Solution h=%s'%(h))
# --- title, explanatory text and save
fig.suptitle(r"$y'=y-x+2$", fontsize=20)
plt.tight_layout()
plt.subplots_adjust(top=0.85)
print('x')
print(x)
print('k1')
print(k_mat[0,:])
print('k2')
print(k_mat[1,:])
print('w')
print(w)
# Midpoint_Question2(N,IC)
Midpoint_Question2(5,1)
x
[0. 0.2 0.4 0.6 0.8 1. ]
k1
[3. 3.44 3.9768 4.631696 5.43066912 0. ]
k2
[3.2 3.684 4.27448 4.9948656 5.87373603 0. ]
w
[1. 1.64 2.3768 3.231696 4.23066912 5.40541633]