[R] Numerical Integration
Julio Rojas
jcredberry at ymail.com
Fri Dec 18 18:05:31 CET 2009
Thanks a lot William. I'm sorry about the syntax problem. I was working at the same time with R code and a document, so I copied from the wrong document.
I saw that I had a problem with the conditions of the integrand. A ">" instead of a ">=" on the second one. Again, thanks.
One last question: Is there a way to use "approx" as the integrand?
Best regards.
Julio
--- El vie 18-dic-09, William Dunlap <wdunlap at tibco.com> escribió:
> De: William Dunlap <wdunlap at tibco.com>
> Asunto: RE: [R] Numerical Integration
> A: "Julio Rojas" <jcredberry at ymail.com>
> Fecha: viernes, 18 diciembre, 2009, 4:03 pm
> The immediate problem is that
> integrand(0.5) is NULL
> because none of the if clauses is TRUE if x==fx[2].
>
> If you restructured the code such that it had no return
> statements and instead assigned things to a variable
> and returned that variable at the end it would be more
> apparent what happened: you would get a 'variable not
> found' error when returning.
> i <- function(x) {
> if (x<fx[1]) retval <- 0
> else if (x>fx[1] &&
> x<=fx[2]) retval <- 1
> else if (x>fx[2]) retval <- 0
> retval
> }
> > i(.4)
> [1] 1
> > i(.3)
> Error in i(0.3) : object 'retval' not
> found
>
> When you convert your code for production use, look
> at the ifelse and approx functions for doing this
> sort of thing. They are much faster than
> Vector(yourIntegrand).
>
> Also, when writing for help from R-help, please use
> R syntax when defining variables, like
> fx<-c(0.3,0.5,0.5,0.6)
> and not some other language, like
> fx<-[0.3,0.5,0.5,0.6]
> If we can copy and paste your example into R instead
> of translating the syntax by hand we will
> be much more inclined to try to fix things up.
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
>
> > -----Original Message-----
> > From: r-help-bounces at r-project.org
>
> > [mailto:r-help-bounces at r-project.org]
> On Behalf Of Julio Rojas
> > Sent: Friday, December 18, 2009 7:02 AM
> > To: r-help at r-project.org
> > Subject: [R] Numerical Integration
> >
> > Dear @ll. I have to calculate numerical integrals for
>
> > triangular and trapezoidal figures. I know you can
> calculate
> > the exactly, but I want to do it this way to learn how
> to
> > proceed with more complicated shapes. The code I'm
> using is
> > the following:
> >
> > integrand<-function(x) {
> > print(x)
> > if(x<fx[1]) return(0)
> > if(x>=fx[1] && x<fx[2])
> return((x-fx[1])/(fx[2]-fx[1]))
> > if(x>fx[2] && x<=fx[3])
> return(1)
> > if(x>fx[3] && x<=fx[4])
> return((x-fx[4])/(fx[3]-fx[4]))
> > if(x>fx[4]) return(0)
> >
> > }
> >
> > fx<-data[i,j,]
> > reltol<-1e-07
> >
> integrate(Vectorize(integrand),0,1,rel.tol=reltol,subdivisions
> > =200)$value
> >
> > It works for most cases, but then, I tried for the
> triangle
> > fx<-[0.3,0.5,0.5,0.6] and the following error was
> presented:
> >
> > >
> integrate(Vectorize(integrand),0,1,rel.tol=reltol,subdivisions=200)
> > [1] 0.5
> > [1] 0.01304674
> > [1] 0.9869533
> > [1] 0.06746832
> > [1] 0.9325317
> > [1] 0.1602952
> > [1] 0.8397048
> > [1] 0.2833023
> > [1] 0.7166977
> > [1] 0.4255628
> > [1] 0.5744372
> > [1] 0.002171418
> > [1] 0.9978286
> > [1] 0.03492125
> > [1] 0.9650787
> > [1] 0.1095911
> > [1] 0.8904089
> > [1] 0.2186214
> > [1] 0.7813786
> > [1] 0.3528036
> > [1] 0.6471964
> > Error in integrate(Vectorize(integrand), 0, 1, rel.tol
> = reltol,
> > subdivisions = 200) :
> > evaluation of function gave a result of wrong
> type
> >
> > Does anybody know what happened? Thanks in advance!!!
> >
> >
> >
> >
> ______________________________________________________________
> > ______________________
> > ¡Obtén la mejor experiencia en la web!
> > Descarga gratis el nuevo Internet Explorer 8.
> > http://downloads.yahoo.com/ieak8/?l=e1
> >
> > ______________________________________________
> > R-help at r-project.org
> mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained,
> reproducible code.
> >
>
____________________________________________________________________________________
¡Obtén la mejor experiencia en la web!
Descarga gratis el nuevo Internet Explorer 8.
http://downloads.yahoo.com/ieak8/?l=e1
More information about the R-help
mailing list