Paulo G.P. Paulo G.P. - 11 months ago 76
R Question

R plotting integral

I'm having some problems with integration function in R. I'm trying to plot the integral vo but it seems I'm not doing correctly.

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

should be a sine wave but using
gives me wrong plot and using
directly gives error 'x' and 'y' lengths differ. Can anyone, please, help me on this matter?

Answer Source

You are already there. Just use plot(t, test_vect(t)). You can't use vo, as integrate is not a vectorized function. There is no problem to evaluate a single point like vo(0.002), but you can not feed it a vector by vo(t). This is why we want Vectorize(vo)(t).

enter image description here

You said that test_vect is not giving the right plot. Sure? We can analytically compute the integral:

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

Then let's compare:

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

They are the same!