[R] code optimization tips
baptiste Auguié
ba208 at exeter.ac.uk
Mon Jul 23 11:29:09 CEST 2007
Hi,
Being new to R I'm asking for some advice on how to optimize the
performance of the following piece of code:
> alpha_c <- function(lambda=600e-9,alpha_s=1e-14,N=400,spacing=1e-7){
>
> k<-2*pi/lambda
> ri<-c(0,0) # particle at the origin
> x<-c(-N:N)
> positions <- function(N) {
> reps <- 2*N+1
> matrix(c(rep(-N:N, each = reps), rep(-N:N, times = reps)),
> nrow = 2, byrow = TRUE)
> }
> rj<-positions(N)*spacing # all positions in the 2N x 2N array
> rj<-rj[1:2,-((dim(rj)[2]-1)/2+1)] # remove rj=(0,0)
>
> mod<-function(x){sqrt(x[1]^2+x[2]^2)} # modulus
>
> sij <-function(rj){
> rij=mod(rj-ri)
> cos_ij=rj[1]/rij
> sin_ij=rj[2]/rij
>
> A<-(1-1i*k*rij)*(3*cos_ij^2-1)*exp(1i*k*rij)/(rij^3)
> B<-k^2*sin_ij^2*exp(1i*k*rij)/rij
>
> sij<-A+B
> }
>
> s_ij<-apply(rj,2,sij)
> S<-sum(s_ij)
> alpha_s/(1-alpha_s*S)
> }
> alpha_c()
This function is to be called for a few tens of values of lambda in a
'for' loop, and possibly a couple of different N and spacing (their
magnitude is typically around the default one).
This can be a bit slow ––– not that I would expect otherwise --- and
I wonder if there is something I could do to optimize it (vectorize
with respect to the lambda parameter?, change the units of the
problem to deal with numbers closer to unity?,...)
Best regards,
baptiste
More information about the R-help
mailing list