2013-02-08 2 views
4

Rcpp를 사용하여 R에서 C++로 루프를 실행하는 함수를 작성하려고합니다.R 및 C++ 반복

나는 OUT의 첫 번째 행의 각 위치가 스칼라 sigma_0에 의해 주어지기 때문에 함수가 반환 할 행렬 OUT보다 한 행 더 짧은 행렬 Z를가집니다.

이 함수는 미분 방정식을 구현한다고 가정합니다. 각 반복은 행렬 OUT의 이전에 생성 된 값뿐만 아니라 행렬 Z의 값에 따라 달라집니다.

는 내가 가지고하는 것은 이것이다 :

cppFunction(' 
    NumericMatrix sim(NumericMatrix Z, long double sigma_0, long double delta, long double omega, long double gamma) { 
     int nrow = Z.nrow() + 1, ncol = Z.ncol(); 
     NumericMatrix out(nrow, ncol); 

     for(int q = 0; q < ncol; q++) { 
      out(0, q) = sigma_0; 
     } 



     for(int i = 0; i < ncol; i++) { 

      for(int j = 1; j < nrow; j++) { 
       long double z = Z(j - 1, i); 
       long double sigma = out(j - 1, i); 
       out(j, i) = pow(abs(z * sigma) - gamma * z * sigma, delta); 

      } 
     } 


     return out; 
    } 
') 

는 불행하게도 나는 그것이 작동하지 않습니다 확신한다. 함수가 실행되지만 계산 된 값이 올바르지 않습니다. Excel 및 일반 R 코딩의 간단한 예제를 확인했습니다. 나는 주요한 미분 방정식을 따로 따로 떼어내어 단계별로 그것을 구축하려고 노력했다. Excel과 R의 구현이 언제 달라지기 시작했는지 알기 위해서였다. 어느 시점에서 abs() 함수와 power() 함수를 사용하기 시작한 것 같지만 문제를 줄일 수는 없습니다. 어떤 도움을 주시면 감사하겠습니다. 또한 R과 함께 C++ 및 C++을 사용하여 처음으로 언급 할 수 있습니다.

답변

4

abs이 아닌 fabs이 필요하다고 생각합니다. absints에서 작동하고 fabs은 복식/부동 소수점에서 작동합니다.

+0

그래, 그 트릭을 않습니다. 고맙습니다. .... 반나절 만 보내면 크게 감사하겠습니다. – user2055639

+0

+1 - 모두 C로 정의되어 있기 때문에 고통스러워하는 것들 중 하나 ... 당신이 (@ user2055639) 이제 StackOverflow에서 일반적으로 대답을 'upvote'하고 'accept'할 수 있다면 좋을 것입니다. –

+0

@DirkEddelbuettel을 좋아합니다. 수락이 투표에 충분한 명성을 얻지 못했을뿐입니다. – user2055639