c++ - R 和 C++ 迭代

标签 c++ r loops rcpp

我正在尝试使用 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 而不是 absabsint 进行操作,而 fabs 对 double/floats 进行操作。

关于c++ - R 和 C++ 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780647/

相关文章:

R shiny file输入大文件

r - ggplot boxplot - 无法让我的情节工作,没有绘制 'box'

c++ - 抽象类的继承成员不能由继承的构造函数初始化

c++ - 每次循环输出一个少一个字符的char数组

c++ - 与设备串行对话的生产者/消费者

linux - readPicture 函数(grImport 包)在 Linux 上不起作用 (F22)

c# - 使用反射循环类变量

c++ - 如何判断输入的数字是否平衡?

multithreading - Groovy 中的线程安全迭代

protected 成员的 C++ 运行时错误