Example #1
0
def test_calculateEV_norm(mean=0.0, moment=2):
	# calculate moments of a normal distribution
	def fFn(x):
		return abs(scipy.real(scipy.power(x, moment)))
	gridArray = scipy.linspace(-10, 10, 500)
	fArray = fFn(gridArray)
	sdRange = scipy.linspace(0.1, 2.0, 100)
	
	t1 = time.time()
	result1 = [calculateEV_montecarlo(fFn, scipy.stats.norm(loc=mean, scale=sd)) for sd in sdRange]
	t2 = time.time()
	result2 = [calculateEV_integrate(fFn, scipy.stats.norm(loc=mean, scale=sd)) for sd in sdRange]
	t3 = time.time()
	result3 = [calculateEV_grid(gridArray, fFn, scipy.stats.norm(loc=mean, scale=sd), zOffset=0.0, leftK=fArray[0], rightK=fArray[-1]) for sd in sdRange]
	t4 = time.time()
	result4 = [_myfuncs.mycalcEV_grid(gridArray, fArray, _myfuncs.NormalCDFObj(mean, sd), 
				_myfuncs.NormalPDFObj(mean, sd), 0.0, fArray[0], fArray[-1]) for sd in sdRange]
	t5 = time.time()

	print("montecarlo: %f" % (t2-t1))
	print("integrate: %f" % (t3-t2))
	print("grid: %f" % (t4-t3))
	print("c++ grid: %f" % (t5-t4))
	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result1)
	plt.title("monte carlo")
	
	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result2)	
	plt.title("integrate")

	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result3)	
	plt.title("grid")

	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result4)	
	plt.title("c++ grid")
Example #2
0
def test_calculateEV_lognorm(mean=0.0, moment=2):
	# calculate moments of a lognormal distribution
	def fFn(x):
		#return abs(scipy.real(scipy.power(x, moment)))
		return scipy.real(-(1.0/x))
	#gridArray = scipy.linspace(0.001, 20, 1000)		
	sdRange = scipy.linspace(0.1, 1.5, 100)
	
	t1 = time.time()
	result1 = []
	for sd in sdRange:
		rv = scipy.stats.lognorm(sd, scale=scipy.exp(mean))
		EV = calculateEV_montecarlo(fFn, rv)
		result1.append(EV)
	t2 = time.time()
	result2 = [calculateEV_integrate(fFn, scipy.stats.lognorm(sd, scale=scipy.exp(mean))) for sd in sdRange]
	t3 = time.time()
	result3 = []
	for sd in sdRange:
		rv = scipy.stats.lognorm(sd, scale=scipy.exp(mean))
		x = rv.ppf(scipy.linspace(0, 1, 200))[1:-1]
		y = fFn(x)		
		EV = calculateEV_grid(x, fFn, rv, zOffset=0.0, leftK=y[0], rightK=y[-1], fArray=y)
		result3.append(EV)
	t4 = time.time()
	result4 = []
	for sd in sdRange:
		rv = scipy.stats.lognorm(sd, scale=scipy.exp(mean))
		x = rv.ppf(scipy.linspace(0, 1, 200))[1:-1]
		y = fFn(x)
		result4.append(_myfuncs.mycalcEV_grid(x, y, _myfuncs.LognormalCDFObj(mean, sd), 
				_myfuncs.LognormalPDFObj(mean, sd), 0.0, y[0], y[-1]))
	t5 = time.time()	
	result5 = []
	x = scipy.linspace(0, 20, 1000)
	y = fFn(x)
	for sd in sdRange:
		rv = scipy.stats.lognorm(sd, scale=scipy.exp(mean))
		pdf_x = rv.ppf(scipy.linspace(0, 1, 1000))[1:-1]
		pdf_y = rv.pdf(pdf_x)		
		result5.append(_myfuncs.mycalcEV_grid2(x, y, pdf_x, pdf_y))
	t6 = time.time()	
	result6 = []
	x = scipy.linspace(0, 20, 1000)[1:-1]
	y = fFn(x)		
	for sd in sdRange:
		rv = scipy.stats.lognorm(sd, scale=scipy.exp(mean))
		EV = calculateEV_montecarlo2(x, y, rv)
		result6.append(EV)
	t7 = time.time()	
	result7 = []
	x = scipy.linspace(0, 20, 1000)[1:-1]
	y = fFn(x)		
	for sd in sdRange:
		EV = calculateEV_lognorm(x, y, lambda x: x, mean, sd)
		result7.append(EV)
	t8 = time.time()	
	result8 = []
	x = scipy.linspace(0, 20, 1000)[1:-1]
	y = fFn(x)		
	for sd in sdRange:
		EV = _myfuncs.lognormal_EV_lininterp(x, y, mean, sd)
		result8.append(EV)
	t9 = time.time()	
	
	print("montecarlo: %f" % (t2-t1))
	print("integrate: %f" % (t3-t2))
	print("grid with CDF/PDF: %f" % (t4-t3))
	print("c++ grid with CDF/PDF: %f" % (t5-t4))
	print("c++ grid 2: %f" % (t6-t5))	
	print("monte carlo 2: %f" % (t7-t6))
	print("partial exp: %f" % (t8-t7))
	print("c++ partial exp: %f" % (t9-t8))
	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result1)
	plt.title("monte carlo")
	
	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result2)	
	plt.title("integrate")

	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result3)	
	plt.title("grid")

	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result4)	
	plt.title("c++ grid")
	
	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result5)	
	plt.title("c++ grid 2")

	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result6)	
	plt.title("monte carlo 2")

	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result7)	
	plt.title("partial exp")

	fig = plt.figure()
	ax = fig.add_subplot(111)
	ax.plot(sdRange, result8)	
	plt.title("c++ partial exp")