На самом деле, в общем, OpenTURNS не имеет большого значения для непрерывного и дискретного распределений. Итак, как только мы создали Distribution
, все, что нам нужно сделать, это использовать метод getSample
, чтобы получить простой образец Монте-Карло. Следующий пример показывает, что мы можем продвинуть идею немного дальше, создав план экспериментов LHS.
Чтобы создать первый маргинальный предел распределения, мы выбираем одномерное дискретное распределение. Многие из них, например, дистрибутивы Bernoulli
или Geometric
, реализованы в библиотеке. В этом примере мы выбираем распределение UserDefined
, которое присваивает равные веса значениям -2, -1, 1 и 2. Затем мы создаем эксперимент Монте-Карло сначала методом getSample
, а затем методом MonteCarloExperiment
,На основе этого распределения может быть сгенерирован любой другой тип дизайна экспериментов, и именно поэтому мы наконец покажем, как создать эксперимент LHS (Latin Hypercube).
import openturns as ot
sample = ot.Sample([-2., -1., 1., 2.],1)
X0 = ot.UserDefined(sample)
X1 = ot.Normal()
distribution = ot.ComposedDistribution([X0,X1])
# Monte-Carlo experiment, simplest version
sample = distribution.getSample(10)
print(sample)
# Monte-Carlo experiment
size = 100
experiment = ot.MonteCarloExperiment(distribution, size)
sample = experiment.generate()
Следующий скрипт создает связанную графику.
graph = ot.Graph("MonteCarloExperiment", "x0", "x1", True, "")
cloud = ot.Cloud(sample, "blue", "fsquare", "")
graph.add(cloud)
graph
Предыдущий скрипт печатает:
[ v0 X0 ]
0 : [ 2 -0.0612243 ]
1 : [ 1 0.789099 ]
2 : [ -1 0.583868 ]
3 : [ -1 1.33198 ]
4 : [ -2 -0.934389 ]
5 : [ 2 0.559401 ]
6 : [ -1 0.860048 ]
7 : [ 1 -0.822009 ]
8 : [ 2 -0.548796 ]
9 : [ -1 1.46505 ]
и создает следующую графику:
Создать LHS в одном и том же дистрибутиве просто.
size = 100
experiment = ot.LHSExperiment(distribution, size)
sample = experiment.generate()