File: t_CubaIntegration_std.py

package info (click to toggle)
openturns 1.26-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 67,708 kB
  • sloc: cpp: 261,605; python: 67,030; ansic: 4,378; javascript: 406; sh: 185; xml: 164; makefile: 101
file content (43 lines) | stat: -rwxr-xr-x 1,472 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#! /usr/bin/env python

import openturns as ot
import math
import openturns.testing as ott

ot.TESTPREAMBLE()

# Testing four algorithms on a function from R^3 to R.
f = ot.SymbolicFunction(["x", "y", "z"], ["sin(x) * cos(y) * exp(z)"])
lbIntegration = [0.0, 0.0, 0.0]
ubIntegration = [1.0, 1.0, 1.0]
valueRef = -math.sin(1.0) * (math.cos(1.0) - 1.0) * (math.e - 1.0)

for r in ot.CubaIntegration.GetAlgorithmNames():
    algoC = ot.CubaIntegration(r)
    value = algoC.integrate(f, ot.Interval(lbIntegration, ubIntegration))
    ott.assert_almost_equal(value[0], valueRef, 1.0e-3, 1.0e-3)

# Testing three algorithms on a function from R^3 to R^2.
f = ot.SymbolicFunction(
    ["x", "y", "z"],
    [
        "exp(-(x * x + y * y + z *z))",
        "(x / 2 * x / 2 + y / 3 * y / 3 + z / 4 * z / 4 - 1.125)",
    ],
)
lbIntegration = [0.0, 0.0, 1.0]
ubIntegration = [2.0, 3.0, 4.0]
valueRef = [0.108972129575688278, -0.375]

for r in ot.CubaIntegration.GetAlgorithmNames():
    if r == "suave":
        # Suave is quite inaccurate with these integrands, skipping.
        continue
    algoC = ot.CubaIntegration(r)
    if r == "vegas":
        # Vegas seemingly needs more favorable parameters there
        algoC.setMaximumRelativeError(5.0e-3)
        algoC.setMaximumAbsoluteError(5.0e-3)
        algoC.setMaximumCallsNumber(10000000)
    value = algoC.integrate(f, ot.Interval(lbIntegration, ubIntegration))
    ott.assert_almost_equal(value, valueRef, 1.0e-3, 1.0e-3)