-1

一般来说,当您进行数值评估和积分时,比如在 MATLAB 中,我只是选择一个较大的数字作为边界还是有办法告诉 MATLAB “取极限”?

我假设您只使用大数字,因为不同的机器将能够处理不同数量级的数字。

我只是想知道他们是否是改进我的代码的一种方法。我正在通过蒙特卡洛进行大量期望值计算,并且经常使用梯形方法来检查我自己的自由度是否足够小。

4

2 回答 2

2

严格来说,不可能将数值积分计算到无穷大。在大多数情况下,如果所讨论的积分是有限的,您可以简单地在相当大的范围内积分。为了收敛到一个稳定的值,正态误差的积分必须小于 10 sigma——这个值,无论好坏,都等于你将要评估相同的积分,一直到无穷大.

于 2012-02-03T18:24:08.873 回答
1

这在很大程度上取决于您要集成的功能类型。如果它是“平滑的”(没有跳跃 - 最好也不是任何导数,但这变得越来越不重要)并且是有限的,那么您有两个主要选择(将自己限制为最简单的方法):1.如果它是周期性的,这里含义:您能否将左右两端放在一起,并且值也没有跳跃(和导数......):将您的点均匀分布在区间上,只需对函数值进行采样以获得估计的平均值,然后乘以获得积分的间隔长度。2.如果不是周期性的:使用Legendre-integration。

蒙特卡罗几乎总是一种糟糕的方法:它在(机器)精度方面进展非常缓慢:对于任何额外的有效数字,您需要应用 100 倍以上的点!上述两种方法,对于周期性和非周期性“好”(平滑等)函数已经用非常少的样本点给出了公平的结果,然后非常迅速地朝着更精确的方向发展:2 个点中的 1 个通常增加几个数字到你的精度!这远远超过了当您想用更多样本点应用下一次努力时必须丢弃先前结果的所有部分的负担:您用新的点替换先前的一组点,而在蒙特卡洛您可以只需简单地将点添加到现有集合中,从而优化结果。

于 2012-09-06T13:13:54.023 回答