我正在尝试编写一个函数,该函数使用 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。