利用 Julia 的集成能力

Taking advantage of Julia's integration abilities

我想在我的项目中使用 Julia 的主要原因之一是它的速度,尤其是在计算积分方面。

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

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

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

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

因为你只有值,没有函数本身,梯形可能是你最好的选择。包 Trapz 提供了这个 (https://github.com/francescoalemanno/Trapz.jl)。但是,我认为值得亲眼看看自己编写一个非常好的实现是多么容易。

function trap(A)
    return sum(A) - (A[begin] + A[end])/2
end

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

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