2013-02-08 43 views
4

我正試圖編寫一個函數,它使用Rcpp從R運行C++中的循環。R和C++迭代

我有一個矩陣Z,比矩陣OUT短一行,函數應該返回,因爲第一行OUT的每個位置將由標量sigma_0給出。

函數應該實現一個微分方程。每次迭代取決於矩陣Z的值以及之前生成的矩陣OUT的值。

什麼我有是這樣的:

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編碼進行了簡單的示例檢查。我已經將主要的差異化方程式剝離出來,試圖逐步建立起來,看看使用C++的Excel和R的實現何時開始有所不同。這似乎是當我開始使用abs()函數和power()函數,但我根本無法縮小問題的範圍。任何幫助將不勝感激 - 也許我會提到這是我第一次使用C++和C++以及R.

回答

4

我認爲你想要fabs而不是absabsint上運行,而fabs在雙打/浮動上運行。

+0

沒錯。非常感謝你......只是花了半天的時間,所以非常感謝。 – user2055639 2013-02-08 23:44:17

+0

+1 - 這些事情之一是痛苦的,因爲它們都是在C中定義的......如果你(@ user2055639)現在可以在StackOverflow上'upvote'和'接受'這個答案,那將會很好。 – 2013-02-09 13:26:33

+0

我很想@DirkEddelbuettel。剛剛接受的投票沒有足夠的聲望。 – user2055639 2013-03-27 16:32:00