Я успешно могу получить собственные значения и собственные векторы из команды Eigen :: EigenSolver, однако я не могу назначить их новой матрице. Мне нужно присвоить 3 собственных вектора новой матрице 3x3, чтобы я мог выполнить транспонирование, а затем умножение матриц на другую матрицу 3x3.
Я получаю следующую ошибку с зеленой морковкой, указывающей на «b» в часть "{a = b;}":
/ Eigen / src / Core / functors / AssignmentFunctors.h: 24: 104: ошибка: присвоение 'double' из несовместимого типа 'const std :: __ 1 :: complex 'EIGEN_DEVICE_FUN C EIGEN_STRONG_INLINE void assignCoeff (DstScalar & a, const SrcScalar & b) const {a = b; }
Я попытался объявить новую переменную, которой я пытаюсь присвоить ее, как MatrixXd или Vector3d, но ни одна из них не работает. Я думаю, что проблема связана с тем, что Eigensolver возвращает каждый элемент как (Real, Complex), и я не манипулирую этим должным образом. Это не было бы плохо, если бы мне нужно было вычислить значения только один раз. Тем не менее, мне нужно отбросить эти вычисления в al oop, и окончательные вычисления из этого процесса будут затем проверены по некоторым условным условиям, чтобы определить, приводят ли случайные значения, используемые в коде, к действительным результатам.
[РЕДАКТИРОВАНИЕ 19 апреля 2020, 1152]. Я только хочу использовать Реальные части для моих текущих расчетов. Спасибо @stark за то, что вы обратили на это мое внимание в комментариях.
Любая помощь будет принята с благодарностью. Пожалуйста, имейте в виду, я не программист по образованию, я изучаю физику и математику, и я привык работать с программным обеспечением Symboli c и python. '' '
// Declare matrices for the up and down type quarks
MatrixXd MatrixYukawaUpQuark(3,3), MatrixYukawaDownQuark(3,3);
// Declare vectors for Up and Down Quark eigenvectors
Vector3d UpQVect, DownQVect;
Eigen::EigenSolver<MatrixXd> es1(MatrixYukawaUpQuark);
UpQVect = es1.eigenvectors(); // THE ERROR COMES FROM HERE, AND IF THIS IS COMMENTED OUT THE CODE WORKS FINE IN GENERATING THE EIGENVECTORS & VALUES IN THE PRINT STATEMENTS
// Printing the Up Quark Matrice values for the Eigenvectors, and Eigenvalues to the screen
std::cout << "\nThe eigenvalues for the Yukawa Up Quark Matrix are: " << std::endl << es1.eigenvalues() << std::endl;
std::cout << "\nThe Up Quark eigenvectors are:" << std::endl << es1.eigenvectors() << std::endl;
Eigen::EigenSolver<MatrixXd> es2(MatrixYukawaDownQuark);
//DownQVect = es2.eigenvectors(); // THIS WILL ALSO PRODUCE AN ERROR AS IT IS THE SAME PROBLEM FROM ABOVE
// Printing the Up Quark Matrice values for the Eigenvectors, and Eigenvalues to the screen
std::cout << "\nThe eigenvalues of the Yukawa Down Quark Matrix are: " << std::endl << es2.eigenvalues() << std::endl;
std::cout << "\nThe Down Quark eigenvectors, V, is:" << std::endl << es2.eigenvectors() << std::endl;
' ''
Ниже приведены печатные выражения, которые вы видите выше:
Собственные значения Yukawa Up Quark Матрица:
(-1.00393,0)
(1.01004,0)
(1.00393,0)
Собственные векторы Up Quark: (-0,707819,0) (0,57735,0) ) (-0,407013,0)
(0,706393,0) (0,57735,0) (-0,409483,0)
(0,00142613,0) (0,57735,0) (0,816495,0)
Собственные значения матрицы Yukawa Down Quark:
(-1,96316,0)
(2.07543,0)
(1.96316,0)
Собственные векторы Down Quark, V, представляют собой:
(-0,713131,0) (0,57735,0) (-0,397632,0)
(0,700925,0) (0,57735,0) (-0,418773,0)
(0,0122058,0) (0,57735, 0) (0,816405,0)