R绘图积分

时间:2016-09-15 16:36:42

标签: r plot integral numerical-integration

我在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'长度不同< / EM> 即可。请问有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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

他们是一样的!