I am successfully able to retrieve the eigenvalues and eigenvectors from the Eigen::EigenSolver command, however, I cannot assign them to a new Matrix. I need to assign the 3 eigenvectors to a new 3x3 Matrix so that I can perform a transpose then Matrix Multiplication against another 3x3 matrix.
I keep getting the following Error with a green carrot pointed to the "b" in the "{ a = b; }" part:
/Eigen/src/Core/functors/AssignmentFunctors.h:24:104: error: assigning to 'double' from incompatible type 'const std::__1::complex' EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a = b; }
I have tried declaring the new variable I am trying to assign it to as MatrixXd or Vector3d and neither seem to work. I think the issue has to do with the Eigensolver returning each element as (Real, Complex) and I'm not manipulating this properly. This would not be a bad thing if I only needed to compute the values once. However, I am going to need to drop these calculations into a loop and the final calculations from this process will then be checked against some conditionals to determine if the random values used in the code result in valid results.
[EDIT 19April2020, 1152am]. I am only looking to use the Real parts for my current calculations. Thank you @stark for bringing this to my attention in the comments.
Any help would be greatly appreciated. Please keep in mind, I'm not a programmer by training, my areas of study are physics and mathematics, and I am used to working with symbolic software and 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;
'''
Below are the print statements that you see above:
The eigenvalues of the Yukawa Up Quark Matrix are:
(-1.00393,0)
(1.01004,0)
(1.00393,0)
The Up Quark eigenvectors are:
(-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)
The eigenvalues of the Yukawa Down Quark Matrix are:
(-1.96316,0)
(2.07543,0)
(1.96316,0)
The Down Quark eigenvectors, V, are:
(-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)