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.
沒錯。非常感謝你......只是花了半天的時間,所以非常感謝。 – user2055639 2013-02-08 23:44:17
+1 - 這些事情之一是痛苦的,因爲它們都是在C中定義的......如果你(@ user2055639)現在可以在StackOverflow上'upvote'和'接受'這個答案,那將會很好。 – 2013-02-09 13:26:33
我很想@DirkEddelbuettel。剛剛接受的投票沒有足夠的聲望。 – user2055639 2013-03-27 16:32:00