2016-09-15 140 views
2

我在R中的積分函數有一些問題。我試圖繪製積分vo,但它似乎我沒有正確地做。R繪製積分

t <- seq(0, 0.04, 0.0001) 
vi <- function(x) {5 * sin(2 * pi * 50 * x)} 
vo <- function(x) {integrate(vi, lower=0, upper=x)$value} 

test_vect = Vectorize(vo, vectorize.args='x') 
plot(t, vo(t)) # should be a cosine wave 
plot(t, vi(t)) # sine wave 

vo應該是正弦波,但使用test_vect給了我錯了劇情和使用vo直接給出錯誤「X」和「Y」長度不同。任何人都可以幫助我解決這個問題嗎?

回答

5

你已經在那裏。只需使用plot(t, test_vect(t))即可。您不能使用vo,因爲integrate不是矢量化函數。評估像vo(0.002)這樣的單點是沒有問題的,但是您無法通過vo(t)爲它提供矢量。這就是我們爲什麼要Vectorize(vo)(t)的原因。

enter image description here

你說test_vect沒有給予正確的情節。當然?我們可以通過分析計算積分:

v <- function (x) (1-cos(100*pi*x))/(20*pi) 

然後讓我們比較:

sum(abs(v(t) - test_vect(t))) 
# [1] 2.136499e-15 

他們都是一樣的!

+0

你是絕對正確的。非常感謝你的答案。 –