讓我從代碼開始,然後逐步解釋它。
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