In [16]:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [12,8]
def f(x) :
res=np.exp(- x*x)
return res
size=10
xmin=0
xmax=2
r=np.random.uniform(low=xmin, high=xmax, size=size)
x=np.linspace(xmin, xmax, size)
x1=np.linspace(xmin, xmax, 100)
plt.plot(x1, f(x1), '-C0', label=r'$f(x)=e^{-x^2}$')
plt.plot(x, np.zeros(x.shape), '|C1', ms=15, label='grid')
plt.plot(x, f(x), 'sC1')
plt.plot(r, np.zeros(r.shape), '+C2', ms=15, label='random' )
plt.plot(r, f(r), 'oC2' )
plt.grid(alpha=0.3)
plt.legend()
plt.savefig('f1.png')
plt.show()
A1=np.sum(f(x))/size
A2=np.sum(f(r))/size
print(A1, A2)
0.44771785342242937 0.48540220333921785
In [58]:
set=np.logspace(1,7, 30 )
s1=[]
s2=[]
A1=[]
A2=[]
A=0.441041
for size1 in set :
size=int(size1)
r=np.random.uniform(low=xmin, high=xmax, size=size)
a2=np.sum(f(r))/size
A2.append(a2)
s2.append(size)
if size > 1e5 : continue
x=np.linspace(xmin, xmax, size)
a1=np.sum(f(x))/size
A1.append(a1)
s1.append(size)
A1=np.array(A1)
A2=np.array(A2)
In [60]:
plt.figure()
plt.loglog(s1, np.abs(A1-A),'-oC3', label='Grid' )
plt.loglog(s2, np.abs(A2-A), '-sC4', label='Random')
plt.legend()
plt.grid()
plt.xlabel('Number of points N')
plt.ylabel('Error in Avg')
plt.savefig('f1.png')
plt.show()
In [ ]:
In [ ]: