Eigen C ++中矩阵的矩阵

时间:2015-03-21 17:16:41

标签: c++ eigen

我正在用C ++创建一个电路分析库(也是为了学习C ++,所以我对它很新)。

熟悉Eigen后,我希望有一个矩阵,每个单元都有一个3x3复杂矩阵。

到目前为止,我已经尝试过这个非常简单的原理证明:

typedef Eigen::MatrixXcd cx_mat;
typedef Eigen::SparseMatrix<cx_mat> sp_mat_mat;

void test(cx_mat Z1){
   sp_mat_mat Y(2, 2);

    Y(0, 0) = Z1;
    Y(2, 2) = Z1;

    cout << "\n\nY:\n" << Y << endl;
}

测试这个简单的例子失败是因为Eigen期望数字而不是结构的可能结果。

事实上,矩阵矩阵很快就是稀疏的,因此稀疏的矩阵结构。

有没有办法让这项工作?

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

我不相信Eigen会给你一种方法来完成这项工作。我想到了与Matrix或Sparse矩阵相关的其他函数,例如:

  • 逆()
  • 范数()
  • m.row()* m.col()

当矩阵元素数被矩阵替换时,Eigen应该做什么?

我能理解的是,您希望拥有一个以有效内存方式存储Eigen::MatrixXcd的数据结构。

您还可以使用地图容器实现此目的:

#include <map>

typedef Eigen::MatrixXcd cx_mat;
cx_mat Z1;

std::map<int,Eigen::MatrixXcd> sp_mat_mat;
int cols = 2;
sp_mat_mat[0*cols+0]=Z1;
sp_mat_mat[2*cols+2]=Z1;

内存效率较低,但可能更容易访问使用向​​量容器:

#include <vector>

std::vector<std::vector<Eigen::MatrixXcd>> mat_mat;

答案 1 :(得分:0)

您是否找到了创建矩阵矩阵的方法? 我看到我们可以使用二维数组来创建矩阵矩阵。 例如,

NaN

我不知道这种方式是否可以节省内存。让我们看看。

答案 2 :(得分:0)

您问“稀疏矩阵结构。有什么方法可以使这项工作有效?”我会说不,因为首先要将电路设计转换成“矩阵矩阵”并不容易。如果要模拟某些东西,则选择与其接近的表示形式。对于电子电路图,存储器中的模式应恕我直言是有向图,带有链表项。在每个节点/结点处都有一个矩阵,代表特定组件输入到输出传输的行为(例如,电阻器,电容器,晶体管),您可以通过分配给每个组件的矩阵传播信号。转换后的信号最终通过连接图中的连接到达输出。在软件中,它应该类似地工作。建议进一步阅读:https://core.ac.uk/download/pdf/53745212.pdf