numerical-methods-montecarlointegrati
on-exercise
In this exercise, you should implement classes that provide a reasonably flexible framework for Monte-Carlo integration.
The framework should be flexible enough to allow
• integration of different functions f : Rn → R
• flexible specification of the integration domains using a transformation from
[0,1]n to a subset of Rn
• flexible use for different random number generators
For convenience, we provide the interfaces that define the framework. You can find these interfaces in the package
info.quantlab.numericalmethods.lecture.montecarlo.integration
Interfaces (provided)
• Integrand
• IntegrationDomain
• Integrator
• MonteCarloIntegratorFactory
The MonteCarloIntegratorFactory's method requires a class implementing
a RandomNumberGenerator. This interface and some classes implementing this interface can
be found in the package
info.quantlab.numericalmethods.lecture.randomnumbers
Integrand and IntegrationDomain
• Objects implementing Integrand provide a function f : A
ightarrow R defined on a domain A.
• Objects implementing IntegrationDomain provide a bijective function g : [0,1]^{n}
ightarrow A that transforms the integration domain and the determinant of the derivative (Jacobi matrix) dg/dx.
• Objects implementing Integrator provide the integral int_A f(z) dz using substitution z = f(x).
Classes
You may use the classes providing random number generators that will be or were developed during the lecture, e.g.,
• RandomNumberGeneratorFrom1D • MersenneTwister
Task
The exercise consists of two separate tasks.
Task 1: A MonteCarloIntegrator
To complete your task:
•
•
•
i. Implement a class implementing the interface Integrator that performs a general Monte-Carlo integration of arbitrary functions on general domains.
The function to integrate will be provided to the integrator's method integrate as an object implementing the interface Integrand.
The integration domain will be provided to the integrator's method integrate as an object implementing the interface IntegrationDomain.
ii. Implement a class implementing the interface MonteCarloIntegratorFactory that allows creating an object of the class that you have implemented in 1). Note: the MonteCarloIntegratorFactory simply calls the constructor of your class.
ii. To allow us to test you implementation, complete the implementation of the
method getMonteCarloIntegratorFactory of MonteCarloIntegrationAssignmentSolutio
n. This allows the creation of an object of your MonteCarloIntegratorFactory. Our unit tests will use this to test your code.
•
ii. Feel free to create your own UnitTests and JavaDoc documentation.
final long seed = 3141;
RandomNumberGenerator randomNumberGenerator = new RandomNumberGeneratorFrom1D(new MersenneTwister(seed), domain.getDimension());
Suggestion: you may test your integrator with different random number generators, e.g. MersenneTwister via
or a HaltonSequence.
Task 2: Using your MonteCarloIntegrator to calculate the integral of a DoubleBinaryFunction
•
v. Complete the method getIntegral of MonteCarloIntegrationAssignmentSolution. Use your Monte-Carlo integrator with approximately 1 million sample points to calculate the integral.
Tasks 3: Implement a SimpsonsIntegrator for the general Simpson's rule in d dimension
To complete your task:
•
•
vi. Implement a class implementing the interface Integrator that performs a general (composite) Simpson's rule integration in d dimension of arbitrary functions on
general domains.
The function to integrate will be provided to the integrator's method integrate as an object implementing the interface Integrand.
The integration domain will be provided to the integrator's method integrate as an object implementing the interface IntegrationDomain.
vii. Implement a class implementing the interface IntegratorFactory that allows creating an object of the class that you have implemented in 1). Note:
the IntegratorFactory simply calls the constructor of your class.
•
•
Hints
vii. To allow us to test you implementation, complete the implementation of the
method getSimpsonsIntegratorFactory of MonteCarloIntegrationAssignment. This allows the creation of an object of your IntegratorFactory. Our unit tests will use this to test your code.
vii. Feel free to create your own UnitTests and JavaDoc documentation.
• Note that your Simpsons integral and your Monte-Carlo integral only operator on [0,1]^d (the object implementing the Domain will provide you with the transformation).
• Your Simpsons integrator should accept the numberOfValuationPoints as an argument. This should be the minimum total number of valuation points. Since the Simpsons rule uses an odd number of points in every dimension, you may use the following code to round this number appropriately
to numberOfSamplePointsEffective, using numberOfSamplePointsPerDimension per dimension.
int dimension = integrationDomain.getDimension();
int numberOfValuationPointsPerDimension = 2 * (int) (Math.ceil(Math.pow(numberOfValuationPoints, 1.0/dimension))/2) + 1;
int numberOfValuationPointsEffective = (int) Math.pow(numberOfValuationPointsPerDimension, dimension);
• You might realise that you need to think a bit to find a short algorithm to implement the Simpsons integration in arbitrary dimensions. It is possible to create a fairly short implementation if you implement a multi-index index - an array of length dimension where
each entry runs from 0 to numberOfSamplePointsPerDimension-1.
Unit Tests
We encourage you to write your own unit tests.
Further Research
This project offers the opportunity to explore Monte-Carlo integration in more detail for those interested. Here are a few suggestions:
• Explore the dependency on the dimension: Consider the integration of x → product(i=0,...,d-1) sin(xi) for 0 < xi < π. The value of the integral is 2^d. This is an d-dimensional integral. For this function, compare the accuracy of Monte-Carlo integration and Simpsons integration with d = 1, 2, 4, 8 using for example n =
5^8 = 390625 sample points.
• Explore the dependency on the smoothness of the function: Consider the integration of (x0,x1) → x02 + x12 < 1.0 ? 1.0 : 0.0 for 0 < xi < 1. The analytic value of this integral π. For this function, compare the accuracy of Monte-Carlo integration and Simpsons integration using n = 101^2 = 10201 sample points.
请加QQ:99515681 邮箱:99515681@qq.com WX:codinghelp
- HGC环电强化国际业务领导架构 谭君骥及Ravindran Mahalingam分别担任专精职务
- 海伯森六维力传感器:助力人形机器人产业发展的创新力量
- 达闼董事长黄晓庆:以技术破局致胜从未止步
- 从辅助到核心,企业如何基于AI Agent升级品牌数字营销
- 国产2.5亿超高分辨率图像传感器发布,主要面向机器视觉领域
- 西部数据推出多款超高速、大容量存储解决方案
- 中关村e谷承办“科创耀未来 奋进谱新篇”企业家创新论坛圆满落幕
- 航科卫星“汕头数字一号”卫星发射成功!
- Gartner 最新魔力象限出炉!ManageEngine卓豪成功入围
- 科技重塑物流,英特尔&集和诚加速智慧物流发展!
- 数智赋能 向“新而行” 坦克与装甲车辆学术与发展论坛召开
- 赛诺威盛:大孔径专科化CT领航者
- 网易硬刚腾讯 两大游戏玩家之间的口水仗不断
- 全球“最独特”的一台华为 nova 6 5G 版手机是什么样子的?
- 拼多多抖音淘宝京东,谁是真低价?