特征库:解决复杂的线性系统

时间:2016-02-28 15:45:22

标签: c++ eigen linear

我有一个复杂的矩阵A和一个复杂的向量b。我想解决线性系统Ax = b。 我尝试使用此页面上的示例,并使其适应我的复杂问题。 http://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html

以下是我正在尝试做的简化示例:

我的对象是这样定义的:

typedef Eigen::Matrix<complexd, Eigen::Dynamic, Eigen::Dynamic> DoubleComplexMatrix;
typedef Eigen::Array<complexd, Eigen::Dynamic, 1> DoubleComplexArray;

在我的代码中,我想解决这个问题

   DoubleComplexMatrix A(3,3);
   DoubleComplexArray b(3);
   DoubleComplexArray x(3);

   A << 1,2,3,  4,5,6,  7,8,10;
   b << 3, 3, 4;
   cout << "Here is the matrix A:\n" << A << endl;
   cout << "Here is the vector b:\n" << b << endl;

   ColPivHouseholderQR<DoubleComplexMatrix> dec(A);
   x = dec.solve(b);
   cout << "The solution is:\n" << x << endl;

错误显示在以下行:DoubleComplexArray x = dec.solve(b);,因为当我发表评论时,不会再出现错误。

我收到此错误:

TideSolve.cpp:98:38: error: no matching function for call to ‘Eigen::ColPivHouseholderQR<Eigen::Matrix<std::complex<double>, -1, -1> >::solve(DoubleComplexArray&)’
DoubleComplexArray x = dec.solve(b);

这是否意味着本征求解器不能与复数一起使用? (我确定他们这样做了,我只是糟糕!) 我是否需要另一个与复杂的ColPivHouseholderQR合作的求解器?如果是这样,哪一个?

我找到了一个老话题,其他人使用了另一个求解器:Solving system Ax=b in linear least squares fashion with complex elements and lower-triangular square A matrix

1 个答案:

答案 0 :(得分:1)

您应该使用Eigen::Matrix代替Eigen::Array。后者用于原始2D数组值。前者用于线性代数矩阵和向量。请参阅相应的manual page