首页 > 编程知识 正文

斐波那契数列python代码(蒙特卡洛模拟r语言)

时间:2023-05-04 01:05:16 阅读:102692 作者:1132

数据科学、统计学和所有科学的著名赌场灵感技术。用Python怎么做?

什么是蒙特卡洛积分?

实际上,蒙特卡洛是世界著名赌场的名称,它位于世界著名的法国里维埃拉摩纳哥城邦(也称为公国)的同一地区。

事实证明,赌场启发了著名科学家的思想,发明了一种有趣的数学技术来解决统计、数值计算和系统仿真中的复杂问题。

当时,高浓缩铀的链式反应动力学为科学家提供了难以想象的复杂理论计算。即使是像约翰冯诺依曼、激情蓝天、尼古拉斯大都会这样的天才头脑也无法用传统的方式解决。因此,他们转向了随机数的奇妙世界,让这些概率驯服了最初难以处理的计算。

令人惊讶的是,这些随机变量可以解决计算问题,这阻碍了确定性方法的发展。不确定性实际上赢了。

就像蒙特卡洛游戏世界中不确定性和随机性的规则一样。这就是这个特殊昵称的灵感来源。

如今,它是一项广泛应用于各个领域的技术。

虽然物流药物开发、统计学习、建模、图像处理、大规模系统模拟天文等。已经取得了所有的成功和名气,基本的概念似乎简单而容易表现出来。在本文中,我们使用一组简单的Python代码来演示它。

这项技术最早和最著名的用途之一是曼哈顿计划。

棘手的积分

虽然常规蒙特卡罗模拟技术的范围要广得多,但这里我们特别关注蒙特卡罗集成技术。

它只是计算复杂定积分的一种数值方法,缺乏封闭形式的解析解。

我们必须计算,

对于不定积分来说,要得到一个封闭解并不容易,甚至是不可能的。但是数值逼近总是能给我们积分和。

这是一张函数图。

在00-1010的总分类下有很多这样的技术。其思想是将曲线下的区域分成矩形或梯形块,通过简单的几何计算进行近似,然后将这些分量求和。

为了简单起见,我只展示了五个等距间隔的方案。

事实上,对于程序员朋友来说,有一个现成的可以快速准确地执行这种计算。

00-1010如果我告诉你不需要统一选择区间,实际上我可以选择100%完全概率的随机区间来计算同一个积分呢?

我选择的示例可能如下所示.

或者这个.

84?from=pc">

我们没有时间或范围来证明其背后的理论,但是可以证明,通过相当大量的随机抽样,我们实际上可以以足够高的精度计算积分!

我们只选择随机数(在限制之间),在这些点上评估函数,将它们加起来,然后按已知因子进行缩放。我们完了。

好。我们还在等什么?让我们用一些简单的Python代码来证明这一主张。

尽管获得了所有成功和名声,但基本构想却看似简单且易于展示。

Python代码

用简单的平均数代替复杂的数学

如果我们要计算以下形式的积分-任何积分,

我们只用以下平均值代替积分的"估计",

其中U代表0到1之间的统一随机数。请注意,我们如何通过简单地将一堆数字相加并取它们的平均值来代替复杂的积分过程!

在任何现代计算系统,编程语言甚至Excel之类的商业软件包中,您都可以使用此统一的随机数生成器。查看我有关此主题的文章,

如何从头开始生成随机变量(不使用库)

我们通过一个简单的伪随机数生成器算法,展示了如何使用它来生成重要的随机数…

我们只选择随机数(在限制之间),在这些点上评估函数,将它们加起来,然后按已知因子进行缩放。我们完了。

函数

这是一个Python函数,该函数接受另一个函数作为第一个参数,两个积分极限以及一个可选整数,以计算由参数函数表示的定积分。

该代码看起来可能与上面的等式(或您在教科书中可能看到的其他版本)略有不同。那是因为我通过在10个间隔内分布随机样本来使计算更加准确。

在我们的特定示例中,参数函数如下所示:

我们可以通过简单地将积分传递给monte_nqdzxc_uniform()函数来计算积分,

如您所见,在这里,我们在积分极限a = 0和b = 4 之间抽取了100个随机样本。

无论如何,计算有多好?

该积分无法解析计算。因此,无论如何,我们需要将蒙特卡洛方法的准确性与另一种数值积分技术进行比较。integrate.quad()为此,我们选择了Scipy 函数。

现在,您可能还在想- 随着采样密度的变化,精度会发生什么变化。这种选择显然会影响计算速度-如果选择降低的采样密度,则需要增加数量。

因此,我们在一定范围的采样密度下模拟了相同的积分,并将结果绘制在金标准之上-Scipy函数在下图中以水平线表示,

因此,我们在低样品密度阶段观察到一些小的扰动,但是随着样品密度的增加,它们会很好地平滑。在任何情况下,与Scipy函数返回的值相比,绝对误差都非常小-约为0.02%。

蒙特卡洛技巧绝妙地发挥了作用!

速度如何?

但这和Scipy方法一样快吗?更好?更差?

我们尝试通过运行100个运行的100个循环(总共10,000个运行)来找出并获取摘要统计信息。

在此特定示例中,蒙特卡洛计算的运行速度是Scipy积分方法的两倍!

尽管这种速度优势取决于许多因素,但可以肯定的是,在计算效率方面,蒙特卡洛技术并不算懈怠。

我们在低样品密度阶段观察到一些小扰动,但是随着样品密度的增加它们会很好地平滑

漂洗,重复,冲洗和重复…

对于像蒙特卡洛积分这样的概率技术,毋庸置疑,数学家和科学家几乎永远不会只停顿一次,而是要重复计算多次并取平均值。

这是来自10,000次运行实验的分布图。

如您所见,该图几乎类似于,这一事实不仅可以用来获取平均值,而且可以围绕该结果构造。

置信区间

4的正负2的置信区间是一个范围的值,我们可以肯定我们的真实值位于...

www.mathsisfun.com

特别适用于高维积分

尽管为了简单起见(出于教学目的),我们坚持使用单变量积分,但可以将同一思想轻松扩展到具有多个变量的高维积分。

与基于Riemann和的方法相比,Monte kqdxg方法在这种更高的维度上尤为突出。对于蒙特卡洛方法,可以以更有利的方式优化样本密度,以使其更快地进行而不会影响准确性。

用数学术语来说,该方法的收敛速度与维数无关。在机器学习方面,当涉及复杂的积分计算时,蒙特卡洛方法是克服维数诅咒的最好朋友。

与基于Riemann和的方法相比,Monte kqdxg方法在这种更高的维度上尤为突出。

总结

我们介绍了蒙特卡洛积分的概念,并说明了它与常规数值积分方法的区别。我们还展示了一组简单的Python代码,用于评估一维函数并评估技术的准确性和速度。

种类更广泛,令人兴奋,并以无所不在的方式用于与人工智能,数据科学和统计建模有关的领域。

例如,DeepMind著名的Alpha Go程序使用了Monte kqdxg搜索技术,从而在游戏Go的高维空间中提高了计算效率。在实践中可以找到许多这样的例子。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。