简体   繁体   中英

Return integrated function using R

Let's say i have a function defined as the following in R:

> f <- function(x) 0.5*sin(x)*(x>=0)*(x<=pi)

i can do this to integrate it between 0 and pi:

> Integrate <- function(f,a,b) integrate(Vectorize(f),a,b)$value
> F <- Integrate(f,0,pi)

But if i want to evaluate and return some values of F i get this error:

> F(c(-100,0,1,2,pi,100))
Error in F(c(-100, 0, 1, 2, pi, 100)) : 
      function "F" is not found

i can understand that this is due to the fact, that my integrate <- function(f,a,b) returns a constant value C which is the result of the integration of f between a and b, but how can i return F as a function to be able to evaluate it's values as a vector and plot it ?

like in this case F should give 0 for any value less than 0 and 1 for any value bigger than pi and be variable between them.

Thanks.

Edit: just to sum it up more clearly: how can i define a function f(x) in [a,b] that will give me f(x) if x is in [a,b], 0 if xb ?

Try wrapping your function call in an sapply and have Integrate return a function.

Integrate <- function(f, a, b)  function(x) if (x < a) 0 else if (x > b) 1 else integrate(Vectorize(f), a, x)$value
F <- Integrate(f, 0, pi)
sapply(c(-100,0,1,2,pi,100), F)

gives

[1] 0.0000000 0.0000000 0.2298488 0.7080734 1.0000000 1.0000000

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM