让我从代码开始,然后逐步解释它。
InnerFunc = function(x) { x + 0.805 }
InnerIntegral = function(y) { sapply(y,
function(z) { integrate(InnerFunc, 15, z)$value }) }
integrate(InnerIntegral , 15, 50)
16826.4 with absolute error < 1.9e-10
第一行很简单。我们只需要功能 f(x) = x + 0.805
就能够计算内积分。
第二步是棘手的唯一的事情。 用一个更简单的 表达式function(z) { integrate(InnerFunc, 15, z)$value }
来计算内积分似乎很自然,并且只是将其整合。问题在于integrate
需要一个矢量化函数。你应该可以给它一个值列表,它将返回一个值列表。第一个积分的这种简单的 形式一次只能处理一个值。 这就是为什么我们需要sapply
,以便我们可以传递值列表 并返回值列表(第一个定积分)。
一旦我们有这个向量化函数的内积分,我们可以通过integrate
得到答案。
后来简化
虽然上述sapply
方法有效,更自然的使用功能Vectorize
这样。
InnerFunc = function(x) { x + 0.805 }
InnerIntegral = Vectorize(function(y) { integrate(InnerFunc, 15, y)$value})
integrate(InnerIntegral , 15, 50)
16826.4 with absolute error < 1.9e-10
来源
2017-04-03 21:06:51
G5W
谢谢你的评论。是的,这只是一个例子。我想要采用双积分的真实函数更复杂。我想用分析的方式来计算它并不容易。 – moggirio