我正在尝试使用 Rcpp 从 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。
最佳答案
我认为您需要 fabs
而不是 abs
。 abs
对 int
进行操作,而 fabs
对 double/floats 进行操作。
关于c++ - R 和 C++ 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780647/