Thanks very much!!! Fábio Mathias Corrêa Estatística e Experimentação Agropecuária/UFLA
--- Em sex, 14/8/09, Simone Giannerini <sgianner...@gmail.com> escreveu: > De: Simone Giannerini <sgianner...@gmail.com> > Assunto: Re: [Rd] Problem with function in fortran 95 > Para: "Fabio Mathias Corrêa" <fabio.u...@yahoo.com.br> > Cc: r-devel@r-project.org > Data: Sexta-feira, 14 de Agosto de 2009, 9:19 > Fabio, > > I see two problems with your code: > > 1. R type numeric corresponds to FORTRAN Real*8 (or double > precision) > so that line 4 of your mat.f95 becomes: > > REAL*8 :: x, y, res > > 2. your R code won't ever succeed because you pass integer > matrices > (x,y,res) to a subroutine that expects REAL*8 data. > you need to coerce all your matrices to "double" as > follows: > > storage.mode(x) <- "double" > storage.mode(y) <- "double" > storage.mode(res) <- "double" > > Finally, you can call the corrected function: > > .Fortran("mymult", x,y,res,as.integer(l),as.integer(c)) > [[1]] > [,1] [,2] [,3] [,4] > [1,] 1 > 6 11 16 > [2,] 2 > 7 12 17 > [3,] 3 > 8 13 18 > [4,] 4 > 9 14 19 > [5,] > 5 10 15 20 > > [[2]] > [,1] [,2] [,3] [,4] [,5] > [1,] 20 16 12 > 8 4 > [2,] 19 15 11 > 7 3 > [3,] 18 14 10 > 6 2 > [4,] 17 13 > 9 5 1 > > [[3]] > [,1] [,2] [,3] [,4] [,5] > [1,] 604 468 332 > 196 60 > [2,] 678 526 374 > 222 70 > [3,] 752 584 416 > 248 80 > [4,] 826 642 458 > 274 90 > [5,] 900 700 500 300 100 > > [[4]] > [1] 5 > > [[5]] > [1] 4 > > > All these issues are discussed in the "Writing R > Extensions" manual, > please read it carefully. > > Ciao > > Simone > > > > On Wed, Aug 12, 2009 at 1:32 PM, Fabio Mathias > Corrêa<fabio.u...@yahoo.com.br> > wrote: > > I am writing a function in fortran 95, but the > intrinsic function MATMUL is not working properly. Here's an > example. > > > > SUBROUTINE mymult(x,y,res,m,n) > > IMPLICIT NONE > > INTEGER :: m,n > > REAL :: x, y, res > > DIMENSION :: x(m,n), y(n,m), res(m,m) > > res = MATMUL(x,y) > > END SUBROUTINE mymult > > > > R CMD SHLIB mat.f95 > > > > In R: > > > > dyn.load("mat.so") > > x <- matrix(1:20,5) > > l <- nrow(x) > > c <- ncol(x) > > y <- matrix(20:1,c) > > res <- matrix(0,l,l) > > dim(x) > > dim(y) > > dim(res) > > l > > c > > .Fortran("mymult", x,y,res,l,c) > > > > [[1]] > > [,1] [,2] [,3] [,4] > > [1,] 1 6 11 16 > > [2,] 2 7 12 17 > > [3,] 3 8 13 18 > > [4,] 4 9 14 19 > > [5,] 5 10 15 20 > > > > [[2]] > > [,1] [,2] [,3] [,4] [,5] > > [1,] 20 16 12 8 4 > > [2,] 19 15 11 7 3 > > [3,] 18 14 10 6 2 > > [4,] 17 13 9 5 1 > > > > [[3]] > > [,1] [,2] [,3] [,4] [,5] > > [1,] 0 0 0 0 0 > > [2,] 0 0 0 0 0 > > [3,] 0 0 0 0 0 > > [4,] 0 0 0 0 0 > > [5,] 0 0 0 0 0 > > > > [[4]] > > [1] 5 > > > > [[5]] > > [1] 4 > > > > > > Linux Ubuntu 8.04 and use compiler gfortran 4.2. > > The problem is the compiler? > > > > Thanks! > > > > Fábio Mathias Corrêa > > Estatística e Experimentação Agropecuária/UFLA > > Brazil > > > > > > > ____________________________________________________________________________________ > > Veja quais são os assuntos do momento no Yahoo! > +Buscados > > http://br.maisbuscados.yahoo.com > > > > ______________________________________________ > > R-devel@r-project.org > mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > > > -- > ______________________________________________________ > > Simone Giannerini > Dipartimento di Scienze Statistiche "Paolo Fortunati" > Universita' di Bologna > Via delle belle arti 41 - 40126 Bologna, ITALY > Tel: +39 051 2098262 Fax: +39 051 232153 > http://www2.stat.unibo.it/giannerini/ > ______________________________________________________ > ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel