2016-09-15 144 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

你是绝对正确的。非常感谢你的答案。 –