Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
cursos:rlavras:compilado [2008/11/02 13:28]
paulojus
cursos:rlavras:compilado [2008/11/02 16:30] (atual)
paulojus
Linha 2: Linha 2:
  
 Nas instruções a seguir os comandos precedidos de ''​$''​ devem ser digidados na linha de comando do Linux (ou análogo em outro sistema operacional),​ e os precedidos por ''>''​ devem ser digitados no R. Nas instruções a seguir os comandos precedidos de ''​$''​ devem ser digidados na linha de comando do Linux (ou análogo em outro sistema operacional),​ e os precedidos por ''>''​ devem ser digitados no R.
 +Os exemplo assumem que todos os arquivos estão no mesmo diretório (pasta) da área de trabalho da sessão do R.
  
 Códigos escritos e compilados em linguagens ''​C'',​ ''​C + +''​ ou ''​Fortran''​ podem ser chamados de dentro do R conforme ilustramos nos exemplos a seguir. Os passos básicos para tal procedimento são: Códigos escritos e compilados em linguagens ''​C'',​ ''​C + +''​ ou ''​Fortran''​ podem ser chamados de dentro do R conforme ilustramos nos exemplos a seguir. Os passos básicos para tal procedimento são:
Linha 11: Linha 12:
 ==== Exemplo 1 ==== ==== Exemplo 1 ====
 Considere escrever uma função em ''​C''​ para calcular valores da função de correlação de Matèrn. Esta função tem como argumento ''​u''​ e parâmetros <​latex>​$(\phi,​ \kappa)$</​latex>​ e é dada pela seguinte expressão:​\\ Considere escrever uma função em ''​C''​ para calcular valores da função de correlação de Matèrn. Esta função tem como argumento ''​u''​ e parâmetros <​latex>​$(\phi,​ \kappa)$</​latex>​ e é dada pela seguinte expressão:​\\
-<​latex>​$\rho(u) = \{2^{\kappa-1} \Gamma(\kappa)\}^{-1} (u/​\phi)^\kappa K_\kappa(u/​\phi).$</​latex>​ +<​latex>​$\rho(u) = \{2^{\kappa-1} \Gamma(\kappa)\}^{-1} (u/​\phi)^\kappa K_\kappa(u/​\phi).$</​latex>​\\ 
-No arquivo {{:​cursos:​rlavras:​clavras01.c|}} encontra-se um código ''​C''​ para calcular valores de uma versão padronizada desta função onde <​latex>​$\phi=1$</​latex>​.+No arquivo {{:​cursos:​rlavras:​clavras01.c|}} encontra-se um código ''​C''​ para calcular valores de uma versão padronizada desta função onde <​latex>​$\phi=1$</​latex>​.\\ 
 +O código ''​C''​ é compilado com:<​code>​$ R CMD SHLIB clavras01.c</​code>​ 
 +Este comando vai gerar um arquivo (biblioteca compartilhada) ''​clavras01.so''​ (''​.so''​ no linux ou ''​.dll''​ no windows) que deve ser carregado na sessão do R com: <code R>> dyn.load("​clavras01.so"​)</​code>​. 
 +Com isto a rotina ''​cormatern''​ definida no código ''​C''​ pode ser chamada na sessão do R como no exemplo a seguir:<​code R>> .C("​cormatern",​ as.integer(10),​ as.double(1:​10),​ as.double(1.5),​ res=as.double(rep(0,​10)))$res</​code>​
  
 +Complementarmente,​ pode-se definir uma função R que seja um //wrapper// para facilitar a chamada da rotina ''​C''​ <code R>
 +"​matern"​ <- function(u, kappa){
 +  out <- .C("​cormatern",​ as.integer(length(u)),​ as.double(u),​
 +            as.double(kappa),​ res = as.double(rep(0,​length(u))))$res
 +  return(out)
 +}
  
-  * {{:​cursos:​rlavras:​clavras02.c|}} +matern(1:​10,​ kappa=1.5) 
-  * {{:​cursos:​rlavras:clavras.r|}}+</​code>​ 
 + 
 + 
 +==== Exemplo 2 ==== 
 +Considere agora uma extensão do exemplo anterior onde temos mais de um arquivo de código. Além do arquivo com código ''​C''​ do exemplo anterior considere também o arquivo ​{{:​cursos:​rlavras:​clavras02.c|}} ​onde mais duas rotinas são definidas. Os dois arquivos são compilados gerando um único arquivo de biblioteca compartilhada com o comando<​code>​$ R CMD SHLIB clavras01.c clavras01.c -o clavras.so</​code>​  
 +Desta forma as três rotinas em ''​C''​ ficam disponíveis no R após carregar a biblioteca compatilhada com <code R>> dyn.load("​clavras.so"​)</​code>​
  

QR Code
QR Code cursos:rlavras:compilado (generated for current page)