访问Armadillo稀疏复杂矩阵元素

时间:2014-08-08 15:53:53

标签: c++ matrix complex-numbers sparse-matrix armadillo

我有以下功能:

double Qi(int i) {
    double val = 0.0;
    for (int j = 0; j < Model.buses.size(); j++)
        val += Sol.V[j] * (Y[i, j].real() * sin(Sol.D[i] - Sol.D[j]) - Y[i, j].imag() * cos(Sol.D[i] - Sol.D[j]));

    return Sol.V[i] * val;
}

变量Y是来自犰狳库SpValProxy<arma::SpMat<std::complex<double> > >的复杂稀疏矩阵。问题是编译器告诉我无法访问特定矩阵元素的实部或虚部。

错误如下:

  

错误:'class arma :: SpValProxy&gt; &GT;”   没有名为'real'的成员

我不清楚如何访问复杂稀疏矩阵的复数属性。

提前致谢。

2 个答案:

答案 0 :(得分:4)

SpValProxy用作元素保护,用于捕获不存储在稀疏矩阵中的零值。

你需要像这样越过警卫:

std::complex<double> temp = Y(i,j);
然后

访问temp的实部和虚部。 Alernatively,改变Y是一个矩阵的const引用,它应该告诉Armadillo直接绕过守卫。

另外,你有一个错误:Y [i,j]没有按照你的想法做。在C ++中,[]表达式中只使用一个索引。改为使用Y(i,j)。

答案 1 :(得分:2)

这也可以更直接的方式起作用:

const sp_cx_mat& YY = Y;

// can now access .real() and .imag() directly:
double re = YY(i,j).real();
double im = YY(i,j).imag();