繁体   English   中英

访问Armadillo稀疏复杂矩阵元素

[英]Accessing Armadillo sparse complex matrix elements

我有以下功能:

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> > >的复杂稀疏矩阵。 问题在于编译器告诉我无法访问特定矩阵元素的实部或虚部。

错误如下:

错误:“类arma :: SpValProxy>>”没有名为“ real”的成员

我不知道如何访问复杂稀疏矩阵的复杂数字属性。

提前致谢。

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

您需要像这样经过警卫:

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

然后访问温度的实部和虚部。 另外,将Y更改为对矩阵的const引用,应告诉Armadillo直接绕过后卫。

另外,您还有一个错误:Y [i,j]并没有执行您认为的操作。 在C ++中,[]表达式内仅使用一个索引。 请改用Y(i,j)。

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

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM