我有以下功能:
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类>>”
没有名为“真实”的成员
我不知道如何访问复杂稀疏矩阵的复杂数字属性。
提前致谢。
最佳答案
SpValProxy用作元素保护,以捕获不存储在稀疏矩阵中的零值。
您需要像这样经过警卫:
std::complex<double> temp = Y(i,j);
然后访问温度的实部和虚部。另外,将Y更改为对矩阵的const引用,应告诉Armadillo直接绕过后卫。
另外,您还有一个错误:Y [i,j]并没有执行您认为的操作。在C ++中,[]表达式内仅使用一个索引。请改用Y(i,j)。