cosapp.core.numerics.sobol_seq

Python library for generating Sobols

Licensing:

This package is heavily based on http://people.sc.fsu.edu/~jburkardt/py_src/sobol/sobol.html, a Python library for generating Sobols by John Burkardt and Corrado Chisari who made their code available under the MIT license. Any additions and/or changes to their code are also made available under the MIT license.

Source: https://github.com/naught101/sobol_seq

MIT License

Copyright (c) 2016

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Authors:

Original FORTRAN77 version of i4_sobol by Bennett Fox. MATLAB version by John Burkardt. PYTHON version by Corrado Chisari

Original Python version of is_prime by Corrado Chisari

Original MATLAB versions of other functions by John Burkardt. PYTHON versions by Corrado Chisari

Original code is available from http://people.sc.fsu.edu/~jburkardt/py_src/sobol/sobol.html

Functions

i4_bit_hi1(n)

i4_bit_hi1 returns the position of the high 1 bit base 2 in an integer.

i4_bit_lo0(n)

I4_BIT_LO0 returns the position of the low 0 bit base 2 in an integer.

i4_sobol(dim_num, seed)

i4_sobol generates a new quasirandom Sobol vector with each call.

i4_sobol_generate(dim_num, n[, skip])

i4_sobol_generate generates a Sobol dataset.

i4_sobol_generate_std_normal(dim_num, n[, skip])

Generates multivariate standard normal quasi-random variables.

i4_uniform(a, b, seed)

i4_uniform returns a scaled pseudorandom I4.

is_prime(n)

is_prime returns True if N is a prime number, False otherwise

prime_ge(n)

PRIME_GE returns the smallest prime greater than or equal to N.

cosapp.core.numerics.sobol_seq.i4_bit_hi1(n)[source]

i4_bit_hi1 returns the position of the high 1 bit base 2 in an integer.

Examples

N

Binary

BIT

0

0

0

1

1

1

2

10

2

3

11

2

4

100

3

5

101

3

6

110

3

7

111

3

8

1000

4

9

1001

4

10

1010

4

11

1011

4

12

1100

4

13

1101

4

14

1110

4

15

1111

4

16

10000

5

17

10001

5

1023

1111111111

10

1024

10000000000

11

1025

10000000001

11

Parameters:
  • Input

  • N (integer)

  • measured. (the integer to be)

  • nonpositive (N should be nonnegative. If N is)

  • 0. (the value will always be)

Return type:

Output, integer BIT, the number of bits base 2.

cosapp.core.numerics.sobol_seq.i4_bit_lo0(n)[source]

I4_BIT_LO0 returns the position of the low 0 bit base 2 in an integer.

Examples

N

Binary

BIT

0

0

1

1

1

2

2

10

1

3

11

3

4

100

1

5

101

2

6

110

1

7

111

4

8

1000

1

9

1001

2

10

1010

1

11

1011

3

12

1100

1

13

1101

2

14

1110

1

15

1111

5

16

10000

1

17

10001

2

1023

1111111111

1

1024

0000000000

1

1025

0000000001

1

Parameters:
  • Input

  • N (integer)

  • measured. (the integer to be)

  • nonnegative. (N should be)

Return type:

Output, integer BIT, the position of the low 1 bit.

cosapp.core.numerics.sobol_seq.i4_sobol(dim_num, seed)[source]

i4_sobol generates a new quasirandom Sobol vector with each call.

Discussion:

The routine adapts the ideas of Antonov and Saleev.

Reference:

Antonov, Saleev, USSR Computational Mathematics and Mathematical Physics, Volume 19, 1980, pages 252 - 256.

Paul Bratley, Bennett Fox, Algorithm 659: Implementing Sobol’s Quasirandom Sequence Generator, ACM Transactions on Mathematical Software, Volume 14, Number 1, pages 88-100, 1988.

Bennett Fox, Algorithm 647: Implementation and Relative Efficiency of Quasirandom Sequence Generators, ACM Transactions on Mathematical Software, Volume 12, Number 4, pages 362-376, 1986.

Ilya Sobol, USSR Computational Mathematics and Mathematical Physics, Volume 16, pages 236-242, 1977.

Ilya Sobol, Levitan, The Production of Points Uniformly Distributed in a Multidimensional Cube (in Russian), Preprint IPM Akad. Nauk SSSR, Number 40, Moscow 1976.

Parameters:
  • Input

  • DIM_NUM (integer)

  • dimensions. (the number of spatial)

  • 40. (DIM_NUM must satisfy 1 <= DIM_NUM <=)

  • Input/output

  • SEED (integer)

  • sequence. (An input value of 0 requests the first (0-th) element of the)

  • quasirandom (This is essentially the index in the sequence of the)

  • output (value to be generated. On)

  • the (SEED has been set to)

  • value (appropriate next)

  • SEED+1. (usually simply)

  • input (If SEED is less than 0 on)

  • 0. (it is treated as though it were)

  • sequence.

Return type:

Output, real QUASI(DIM_NUM), the next quasirandom vector.

cosapp.core.numerics.sobol_seq.i4_sobol_generate(dim_num, n, skip=1)[source]

i4_sobol_generate generates a Sobol dataset.

Parameters:
  • Input

  • dim_num (integer)

  • dimension. (the spatial)

  • Input

  • N (integer)

  • generate. (the number of points to)

  • Input

  • SKIP (integer)

  • skip. (the number of initial points to)

Return type:

Output, real R(M,N), the points.

cosapp.core.numerics.sobol_seq.i4_uniform(a, b, seed)[source]

i4_uniform returns a scaled pseudorandom I4.

Discussion:

The pseudorandom number will be scaled to be uniformly distributed between A and B.

Reference:

Paul Bratley, Bennett Fox, Linus Schrage, A Guide to Simulation, Springer Verlag, pages 201-202, 1983.

Pierre L’Ecuyer, Random Number Generation, in Handbook of Simulation, edited by Jerry Banks, Wiley Interscience, page 95, 1998.

Bennett Fox, Algorithm 647: Implementation and Relative Efficiency of Quasirandom Sequence Generators, ACM Transactions on Mathematical Software, Volume 12, Number 4, pages 362-376, 1986.

Peter Lewis, Allen Goodman, James Miller A Pseudo-Random Number Generator for the System/360, IBM Systems Journal, Volume 8, pages 136-143, 1969.

Parameters:
  • Input

  • A (integer)

  • B

  • values. (the minimum and maximum acceptable)

  • Input

  • SEED (integer)

  • generator. (a seed for the random number)

Returns:

  • Output, integer C, the randomly chosen integer.

  • Output, integer SEED, the updated seed.

cosapp.core.numerics.sobol_seq.is_prime(n)[source]

is_prime returns True if N is a prime number, False otherwise

Parameters:
  • Input

  • N (integer)

  • checked. (the number to be)

Return type:

Output, boolean value, True or False

cosapp.core.numerics.sobol_seq.prime_ge(n)[source]

PRIME_GE returns the smallest prime greater than or equal to N.

Examples

N

PRIME_GE

-10

2

1

2

2

2

3

3

4

5

5

5

6

7

7

7

8

11

9

11

10

11

Parameters:
  • Input

  • N (integer)

  • bounded. (the number to be)

Returns:

  • Output, integer P, the smallest prime number that is greater

  • than or equal to N.