Paulo G.P. - 1 year ago 116
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

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

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).

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!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download