Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 优化积分f(x)exp(-x)从x=0,无穷远_Algorithm_Numerical Methods - Fatal编程技术网

Algorithm 优化积分f(x)exp(-x)从x=0,无穷远

Algorithm 优化积分f(x)exp(-x)从x=0,无穷远,algorithm,numerical-methods,Algorithm,Numerical Methods,我需要一个稳健的积分算法,用于x=0和无穷大之间的f(x)exp(-x),使用f(x)一个正的可微函数。 我事先不知道数组x(它是我例程的中间输出)。x阵列通常为对数等距,但高度不规则。 目前,我使用的是辛普森算法,我的问题是,域经常被x数组严重采样不足,这会产生不切实际的积分值。 在每次运行我的代码时,我都需要进行数千次这种集成(每个都有一组不同的x值),因此我需要找到一种高效而健壮的方法来集成这个函数 更多详情: x数组可以有2到N个点(N个已知点)。第一个值总是x[0]=0.0。最后一点的

我需要一个稳健的积分算法,用于x=0和无穷大之间的
f(x)exp(-x)
,使用
f(x)
一个正的可微函数。 我事先不知道数组
x
(它是我例程的中间输出)。
x
阵列通常为对数等距,但高度不规则。 目前,我使用的是辛普森算法,我的问题是,域经常被
x
数组严重采样不足,这会产生不切实际的积分值。 在每次运行我的代码时,我都需要进行数千次这种集成(每个都有一组不同的x值),因此我需要找到一种高效而健壮的方法来集成这个函数

更多详情:
x
数组可以有2到N个点(N个已知点)。第一个值总是
x[0]=0.0
。最后一点的值始终大于可调阈值
x_max
(因此
exp(x_max)约为0
)。我只知道
f
x[I]
点的值(尽管该函数是平滑函数)


我的第一个想法是做拉盖尔-高斯积分。然而,当不使用最佳正交点时,该算法似乎非常不可靠

我目前的想法是添加一组辅助点,插值
f
,以便辛普森算法变得更稳定。如果我这样做,是否存在辅助点的最佳选择

如果有任何建议,我将不胜感激, 谢谢。

设置
t=1-exp(-x)
,然后
dt=exp(-x)dx
,积分值等于

integral[ f(-log(1-t)) , t=0..1 ]
你可以用标准的辛普森公式计算,希望能得到好的结果


请注意,分段线性插值将始终导致积分的二阶误差,因为即使采用辛普森方法,结果也相当于梯形公式。为了在辛普森方法中获得更好的误差,您需要更高的插值次数,最好是三次样条曲线。带估计导数的三次贝塞尔多项式可以快速折衷计算控制点。

在f(x)exp(x)或f(x)exp(-x)时,你可能会更幸运?(正x或负x的指数)?您的函数评估的CPU成本有多高?(更多的评估点便宜吗?)。在您了解了这一点之后,您可以查看以了解这一点如何适用于不同的时间间隔。例如,您所述的问题将使用“不使用最佳正交点时高度不可靠”:如果您不使用正确的公式,为什么它会起作用?谢谢,我实际上使用了
t=exp(-x)
,然后集成
f(t)dt
。我对照分析值检查了结果,得到的误差可以忽略不计。即使使用trapz算法,这也要快得多。是的,这也行。不同之处在于,一个参数化在增长,另一个在下降。