Numerical Methods: Assignment #2: P. Ajith 04:30pm
Numerical Methods: Assignment #2: P. Ajith 04:30pm
P. Ajith 04:30pm
Contents
Problem 1
Problem 2
Page 2 of 10
Problem 1
Listing 1 shows a My python code.
Listing 1: My Pythone code for given problem
import numpy as np
import matplotlib.pyplot as plt
import time
from scipy import integrate
5
10
15
20
25
30
35
40
45
t_initial=time.time()
#===============================================================================
def f(x):
return(np.exp(-x**2))
def mid_point(a,b,h):
x_1=np.arange(a,b,h)
z=np.zeros(x_1.shape,np.float)
z[0:]=f((x_1[0:])+0.5*h )
a=h
z=a*z
y=np.zeros(z.shape,np.float)
y[0]=z[0]
for i in range(len(x_1)-1):
y[i+1]=y[i]+z[i+1]
return(y)
def simp(a,b,h):
x_1=np.arange(a,b,h)
z=np.zeros(x_1.shape,np.float)
x0=x_1[0:]
x1=x_1[0:]+h
x2=x_1[0:]+h+h
z[0:]=( f(x0)+f(x2)+4*f(x1) )/(6/h)
y=np.zeros(z.shape,np.float)
y[0]=z[0]
for i in range(len(x_1)-1):
y[i+1]=y[i]+z[i+1]
return(y)
def trap(a,b,h):
x_1=np.arange(a,b,h)
z=np.zeros(x_1.shape,np.float)
z[0:]=(h/2)*( f(x_1[0:])+f(x_1[0:]+h) )
y=np.zeros(z.shape,np.float)
y[0]=z[0]
for i in range(len(x_1)-1):
y[i+1]=y[i]+z[i+1]
return(y)
def order(a,b,c):
Page 3 of 10
50
Problem 1 (continued)
n=np.zeros(c.shape,np.float)
n=np.abs((c-b)/(b-a))
return(np.log(n)/np.log(2));
#======================================================================#
55
60
65
70
#h=np.linspace(10**(-1),10**(-3),3)
h1=0.05
h=[h1,2*h1,4*h1]
x_1=np.arange(-5.0,5.0,h[0])
m_1=mid_point(-5.0,5.0,h[0])
s_1=simp(-5.0,5.0,h[0])
t_1=trap(-5.0,5.0,h[0])
x_2=np.arange(-5.0,5.0,h[1])
m_2=mid_point(-5.0,5.0,h[1])
s_2=simp(-5.0,5.0,h[1])
t_2=trap(-5.0,5.0,h[1])
x_3=np.arange(-5.0,5.0,h[2])
m_3=mid_point(-5.0,5.0,h[2])
s_3=simp(-5.0,5.0,h[2])
t_3=trap(-5.0,5.0,h[2])
t_final=time.time()-t_initial
75
#======================================================================
#=======================================================================
80
85
90
#=========================================Plot==============================
plt.figure(1)
# the first figure
for i in range(len(h)):
plt.subplot(3,1,i+1)
i f (i==0):
plt.plot(x_1[::4],m_1[::4],x_2[::2],m_2[::2],x_3,m_3)
plt.ylabel(" Numerical Derivative")
plt.title(For mid point methode $ )
i f (i==1):
plt.plot(x_1[::4],s_1[::4],x_2[::2],s_2[::2],x_3,s_3)
plt.title(For mid point methode $ )
i f (i==2):
plt.plot(x_1[::4],t_1[::4],x_2[::2],t_2[::2],x_3,t_3)
plt.title(For mid point methode $ )
95
100
#========================================================================
#print(len(x_3),len(s_2[::2]))
#=======================================================================
#Order#
#=======================================================================
plt.figure(2)
Page 4 of 10
105
110
Problem 1 (continued)
plt.title(Order of Convergence)
for i in range(len(h)):
plt.subplot(3,1,i+1)
i f (i==0):
plt.plot(x_3,order(m_1[::4],m_2[::2],m_3),ro)
plt.ylabel("mid point method ")
i f (i==1):
plt.plot(x_3,order(s_1[::4],s_2[::2],s_3),ko)
plt.ylabel(" Simpson 1/3 method ")
i f (i==2):
plt.plot(x_3,order(t_1[::4],t_2[::2],t_3))
plt.ylabel("Trapezoidal rule")
115
120
125
130
135
140
145
150
#=======================================================================
#Error#
#=======================================================================
plt.figure(3)
plt.title(Error)
for i in range(len(h)):
plt.subplot(3,1,i+1)
i f (i==0):
plt.plot(x_3,np.abs(m_1[::4]-m_3),x_2,np.abs(m_2-m_1[::2]))
plt.ylabel("mid point method ")
i f (i==1):
plt.plot(x_3,np.abs(s_1[::4]-s_3),x_2,np.abs(s_2-s_1[::2]))
plt.ylabel(" Simpson 1/3 method ")
i f (i==2):
plt.plot(x_3,np.abs(t_1[::4]-t_3),ro,x_2,np.abs(t_2-t_1[::2]))
plt.ylabel("Trapezoidal rule")
#=======================================================================
#Gravtional Energy
#=======================================================================
t,hp,hn= np.loadtxt("Richardson.dat", usecols=(0,1,2),comments=#, unpack=True)
#=========================================================================
#Function for Energy
#========================================================================
def c_d(x,y):
dy=np.zeros(y.shape,np.float)
dy[0]=(y[1]-y[0])/(x[1]-x[0])
dy[-1]=(y[-1]-y[-2])/(x[-1]-x[-2])
dy[1:-1]=(y[2:]-y[0:-2])/(x[2:]-x[0:-2])
return(dy);
def simp_1(t,y,h):
z=np.zeros(t.shape,np.float)
z[0:-2]=(h/6)*( y[0:-2]+y[2:]+4*y[1:-1] )
z[-2]=(h/2)*(y[-2]+y[-1])
z[-1]=(h/2)*(y[-2]+y[-1])
Page 5 of 10
155
Problem 1 (continued)
w=np.zeros(z.shape,np.float)
w[0]=z[0]
for i in range(len(t)-1):
w[i+1]=w[i]+z[i+1]
return(w)
160
165
def trap_1(t,y,h):
z=np.zeros(t.shape,np.float)
z[0:-1]=(h/2)*( y[0:-1]+y[1:] )
z[-1]=z[-2]
w=np.zeros(z.shape,np.float)
w[0]=z[0]
for i in range(len(t)-1):
w[i+1]=w[i]+z[i+1]
return(w)
170
175
def energy_density(a,b):
z=np.zeros(a.shape,np.float)
z=a*a+b*b
return(z);
#z_1=integrate.cumtrapz(,t,initial=0)
180
#========================================================================
#Raw Caluclation for Energy
#=======================================================================
185
190
n=1
n2=2*n
n4=4*n
hp_dt_1=c_d(t,hp)
hp_dt_2=hp_dt_1[::n2]
hp_dt_3=hp_dt_1[::n4]
195
hn_dt_1=c_d(t,hn)
hn_dt_2=hn_dt_1[::n2]
hn_dt_3=hn_dt_1[::n4]
200
energy_density_1=energy_density(hp_dt_1,hn_dt_1)
energy_density_2=energy_density(hp_dt_2,hn_dt_2)
energy_density_3=energy_density(hp_dt_3,hn_dt_3)
205
s1_1=simp_1(t,energy_density_1,t[n]-t[0])
t1_1=trap_1(t,energy_density_1,t[n]-t[0])
plt.figure(10)
plt.plot(t,s1_1)
#t1_1=integrate.cumtrapz(energy_density_1,t,initial=0)
s1_2=simp_1(t[::n2],energy_density_2,t[n2]-t[0])
Page 6 of 10
210
Problem 1 (continued)
t1_2=trap_1(t[::n2],energy_density_2,t[n2]-t[0])
print(s1_1[-1])
#t1_2=integrate.cumtrapz(energy_density_2,t[::n2],initial=0)
s1_3=simp_1(t[::n4],energy_density_3,t[n4]-t[0])
t1_3=trap_1(t[::n4],energy_density_3,t[n4]-t[0])
#t1_3=integrate.cumtrapz(energy_density_3,t[::n4],initial=0)
215
220
#====================================================================
def n1(x,y,z):
order=np.zeros(z.shape,np.float)
order=np.log(np.abs((z-y)/(y-x) ))/np.log(2)
return(order);
a1,b1,c1=s1_1[::n4],s1_2[::2],s1_3
print(len(a1),len(b1),len(c1))
225
230
235
240
O_1=-n1(a1,b1,c1)
a2,b2,c2=t1_1[::n4],t1_2[::2],t1_3
O_2=-n1(a2,b2,c2)
plt.figure(5)
plt.plot(t[::n4],O_1)
plt.plot(t[::n4],O_2)
#====================================================================
"""plt.figure(4)
plt.title(Order of Convergence)
for i in range(2):
plt.subplot(2,1,i+1)
if(i==0):
plt.plot(t[::4],O_1)
plt.ylabel(" Simpson 1/3 method ")
if(i==10):
plt.plot(t[::4],O_2)
plt.ylabel("Trapezoidal rule")
"""
245
250
#=====================================================================
#=====================================================================
#print(len((s1_2[::2])),len(t[::4*n]))
plt.show()
Page 7 of 10
Problem 1 (continued)
Page 8 of 10
Problem 1 (continued)
Problem 2
Page 9 of 10
Problem 2 (continued)
Page 10 of 10