利用 Julia 的集成能力

mat*_*ver 3 integration julia

我想在我的项目中使用 Julia 的主要原因之一是它的速度,特别是计算积分时。

我想在某个区间 [a,b] 上积分一维函数 f(x)。一般来说,Julia 的quadgk 函数将是一个快速且准确的解决方案。但是,我没有函数 f(x),只有 [a,b] 中存储在数组中的一组离散点 xi 的值 f(xi)。xi 的间距是规则的,我可以将间距设置为我喜欢的小值。

天真地,我可以简单地定义一个函数 f ,它使用值 f(xi) 进行插值并将其提供给quadgk,(并使间距尽可能小),但是然后我不知道我的错误是什么,这是一个耻辱,因为 QuadGK 告诉你它的估计错误。

另一个解决方案是自己编写一个函数来整合数组(例如使用梯形规则),但这会违背使用 Julia 的目的......

使用 Julia 精确积分给定离散值的函数的最简单方法是什么?

Osc*_*ith 5

由于您只有值,而不是函数本身,因此梯形可能是您最好的选择。该软件包Trapz提供了此功能(https://github.com/francescoalemanno/Trapz.jl)。不过,我认为值得一看的是,您自己编写一个非常好的实现是多么容易。

function trap(A)
    return sum(A) - (A[begin] + A[end])/2
end
Run Code Online (Sandbox Code Playgroud)

对于 1000 万个浮点数的数组,这需要 2.9 毫秒。如果是Int,则 2.9ms。如果它们是复数,它仍然可以工作(并且需要 8.9 毫秒)

像这样的方法是一个很好的例子,它展示了在 Julia 中编写非常快速且仍然完全通用的代码是多么简单