访问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> > >
的复稀疏矩阵。问题是编译器告诉我不能访问特定矩阵元素的实部或虚部。
错误如下:
error: ' class arma::SpValProxy>> '没有名为' real '的成员
我不知道该怎么做才能访问复稀疏矩阵的复数属性。
SpValProxy用作元素保护,以捕获不存储在稀疏矩阵中的零值。
你需要像这样通过警卫:
std::complex<double> temp = Y(i,j);
然后访问temp的实部和虚部,或者,将Y更改为对矩阵的const引用,这将告诉Armadillo直接绕过守卫。
还有,你有一个bug: 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();
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- Armadillo C :如何使用来自另一个矩阵的多个元素(特别是在立方体结构中)修改矩阵的多个数组元素
- 如何在Armadillo中的矩阵中执行元素布尔运算
- 访问Armadillo稀疏复矩阵元素
- 将cx_vec元素强制转换为double complex armadillo c++