如何求解复杂的线性系统

How to solve complex linear systems?

本文关键字:线性系统 复杂 何求解      更新时间:2023-10-16

我有一个复矩阵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处理复杂问题?如果是,是哪一个?

我发现了一个老问题,有人使用了另一个求解器。

你应该使用Eigen::Matrix而不是Eigen::Array。后者适用于值的原始 2D 数组。前者用于线性代数矩阵和向量。请参阅相应的手册页。