這次介紹 平均值法 數(shù)值計算積分
數(shù)值計算: 平均值法 (1) 取 ~,,則 所以 (2) 設 i.i.d. ,,則 是獨立同分布隨機變量序列,由 強大數(shù)定律: (3) 的強相合估計為: 以下為Python代碼 (代碼實現(xiàn)了平均值法、復合Simpson法,、Python自帶函數(shù)) import numpy as np from matplotlib import pyplot as plt from scipy import integrate
# exp(x^2) 在 [1,2] 的積分 a,b = 1,2
# 定積分計算 def f(x): return np.exp(x**2) I_exact, Error = integrate.quad(f,a,b)
# 平均值法 N = np.power(10,4) x_sample = a + (b-a)*np.random.rand(N) np.random.seed(1) h_x = f(x_sample) I_approx_stat = (b-a)/N*np.sum(h_x)
# 復合Simpson M = np.power(2,12)+1 h = (b-a)/M x = np.linspace(a,b,M) coeff = np.ones(M) coeff[np.arange(1,M-2,1)] = 4 coeff[np.arange(2,M-1,2)] = 2 I_approx_simpson = np.sum( np.multiply( f(x), h*coeff/3 ) )
print( '定積分值:', I_exact ) print( '平均值法結果:', I_approx_stat ) print( '復合Simpson法結果:', I_approx_simpson )
plt.hist(x_sample, 30, density = True) plt.title('histogram of random numbers',fontsize = 15) plt.xlabel('x',fontsize = 15) plt.ylabel('density',fontsize = 15)
plt.show()
平均值法 與 復合Simpson法 的數(shù)值結果接近,。請大家思考如何衡量隨機誤差,,能否進一步減少誤差提高計算精度呢?
|