У меня есть сложная матрица A и комплексный вектор b. Я хотел бы решить линейную систему Ax = b. Я попытался использовать пример на этой странице и адаптировать его к моей сложной проблеме. http://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.htmlEigen Library: решение комплексной линейной системы
Вот упрощенный пример того, что я пытаюсь сделать:
Мои объекты определяются следующим образом:
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
Я удалил «Пожалуйста, помогите» и «Извинения за мой английский». а) они не актуальны; б) Ваш английский в порядке; лучше я подозреваю, чем значительное число носителей английского языка, которые публикуют здесь. –
Ваш пример показывает: 'DoubleComplexArray x (3);' + 'x = dec.solve (b);'. Ваше сообщение об ошибке и текст показывают «DoubleComplexArray x = dec.solve (b);». Что он? –