Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
利用Julia';学生的综合能力_Julia_Integration - Fatal编程技术网

利用Julia';学生的综合能力

利用Julia';学生的综合能力,julia,integration,Julia,Integration,我想在我的项目中使用Julia的一个主要原因是它的速度,特别是在计算积分时 我想在某个区间[a,b]上积分一维函数f(x)。一般来说,Julia的quadgk函数是一个快速而精确的解。但是,我没有函数f(x),但它的值f(Xi)仅在一组离散数组中的席[a,b],存储在数组中。< /强>席席的规则间隔,并且我可以得到间隔,但是我喜欢小。 天真地说,我可以简单地定义一个函数f,它使用值f(xi)进行插值,然后将其输入到quadgk(并使间距尽可能小),但是我不知道我的误差是什么,这是一个遗憾,因为q

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

我想在某个区间[a,b]上积分一维函数f(x)。一般来说,Julia的quadgk函数是一个快速而精确的解。但是,我没有函数f(x),但它的值f(Xi)仅在一组离散数组中的席[a,b],存储在数组中。< /强>席席的规则间隔,并且我可以得到间隔,但是我喜欢小。

天真地说,我可以简单地定义一个函数f,它使用值f(xi)进行插值,然后将其输入到quadgk(并使间距尽可能小),但是我不知道我的误差是什么,这是一个遗憾,因为quadgk在其估计中告诉您误差

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


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

因为你只有值,而不是函数本身,梯形可能是你最好的选择。包
Trapz
提供了此功能()。然而,我认为值得一看的是,自己编写一个相当好的实现是多么容易

function trap(A)
    return sum(A) - (A[begin] + A[end])/2
end
对于1000万个浮点数的阵列,这需要2.9毫秒。如果它们是
Int
,则为2.9ms。如果它们是复数,它仍然有效(需要8.9毫秒)


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

给定离散值并且没有关于函数的其他信息,你不能做得比梯形更好。@OscarSmith:我是Julia的新手。现在,我更喜欢使用Julia中已有的集成函数,而不是编写自己的。显然有一个函数QuadGK,但同样的问题,我猜这只接受函数,而不是一个值数组?当你说你可以得到你喜欢的最小间距,这表明你可以访问底层函数,对吗?还是从某种物理过程来衡量?如果您对底层信号(或其功能)有任何了解,则可以改进
trapz
。它光滑吗?它是振荡的吗?如果你实际积分f(x)^2,Trapz在振荡方面有一些系统性问题。