[R] MATLAB vrs. R
Daniel Nordlund
djnordlund at frontier.com
Tue Oct 12 01:12:48 CEST 2010
I apologize for the noise. I didn't clean up the code enough. See below.
<<<snip>>>
>
> Craig,
>
> I haven't seen an answer to this yet, so let me jump in. You seem to have
> some stuff still leftover from MATLAB. Here is some cleaned up code that
> produces the result you expect. I don't think the value of dx was being
> correctly computed in your code. I did not change the assignment operator
> you used (=), but in R the "preferred" operator is "<-" (without the
> quotes).
>
> myquadrature <- function(f,a,b){
> npts = length(f)
> nint = npts-1
> if(npts <= 1) error('need at least two points to integrate')
> if(b <= a) error('something wrong with the interval, b should be greater
> than a') else dx=b/nint
The 2 'if' statements above should have been
if(npts <= 1) stop('need at least two points to integrate')
if(b <= a) stop('something wrong with the interval, b should be greater than a') else dx=b/nint
> sum(f[-npts]+f[-1])/2*dx
> }
>
> #Call my quadrature
> x = seq(0,2000,10)
> h = 10*(cos(((2*pi)/2000)*(x-mean(x)))+1)
> u = (cos(((2*pi)/2000)*(x-mean(x)))+1)
> a = x[1]
> b = x[length(x)]
> plot(x,-h)
> a = x[1];
> b = x[length(x)]
>
> #call your quadrature function. Hint, the answer should be 30000.
> f = u*h
> result = myquadrature(f,a,b)
> result
>
> Hope this is helpful,
>
> Dan
>
Daniel Nordlund
Bothell, WA USA
More information about the R-help
mailing list