python字符串转数字函数发生器_QuantLib 金融计算——数学工具之随机数发生器

[toc]

如果未做特别说明,文中的程序都是 Python3 代码。

QuantLib 金融计算——数学工具之随机数发生器

载入模块

import QuantLib as ql

import scipy

print(ql.__version__)

1.12

概述

随机模拟通常从产生均匀分布的随机数开始。假设 $X \sim U [0, 1]$ 是均匀分布的随机变量。任意分布的随机数通常需要对 $X$ 施加某种变换得到,一般情况下是用累积分布函数的逆函数 $F^{−1}$,$F^{−1}(X)$ 的分布就是 $F$。其他的变换算法可能不需要 $F^{−1}$,比如用于生成正态分布的 Box Muller 变换算法。

均匀分布的随机数发生器主要分两种:

伪随机数(wiki)

拟随机数,也称低偏差序列(wiki)

伪随机数

quantlib-python 提供了以下三种均匀分布的(伪)随机数发生器:

KnuthUniformRng,高德纳(Knuth)算法

LecuyerUniformRng,L'Ecuyer 算法

MersenneTwisterUniformRng,著名的梅森旋转(Mersenne-Twister)算法

随机数发生器的构造函数,

Rng(seed)

其中

seed,整数,默认值是 0,作为种子用于初始化相应的确定性序列;

随机数发生器的成员函数:

next():返回一个 SampleNumber 对象,作为模拟的结果。

r = rng.next()

v = r.value(r)

用户通过反复调用成员函数 next() 获得一连串的随机数,需要注意的是 r 的类型是 SampleNumber,需要调用 value() 得到对应的浮点数。

例子 1,

def testingRandomNumbers1():

seed = 1

unifMt = ql.MersenneTwisterUniformRng(seed)

unifLec = ql.LecuyerUniformRng(seed)

unifKnuth = ql.KnuthUniformRng(seed)

print('{0:<25}{1:<25}{2:<25}'.format(

'Mersenne Twister', 'Lecuyer', 'Knut'))

for i in range(10):

print(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值