If I have the Hessian matrix and the mass-weighted Hessian matrix for a system, I can find the normal modes from the mass-weighted Hessian and the force constants from the Hessian.

I have a list of the eigenvalues and eigenvectors, but I'm trying to figure out how to map each force constant to each vibrational mode. How would I go about doing that?

I have two sets of eigenvalue/eigenvector pairs. The eigenpairs for the mass-weighted Hessian gives me the vibrational frequencies and the eigenvectors for those frequencies. The eigenpairs for the non-mass-weighted Hessian (so, just a normal Hessian) give the force constants and the associated eigenvectors. What I want is to match the eigenpairs from the Hessian to the eigenpairs for the mass-weighted Hessian so then I'd have the force constant for each vibrational mode.

Right now I have a list of force constants and vibrational modes, but I have no way to know which force constant goes to which vibrational mode (since I don't know the reduced mass for the vibrational modes). If I can figure out how to relate the eigenvectors between the Hessian and mass-weighted Hessian, then I'd be able to pair the vibrational frequencies and force constants.

  • 1
    $\begingroup$ How did you obtain the eigenpairs? It's normally pretty obvious which eval is connected to which evec. Or is it visualising what the evec is telling you that you are asking about? $\endgroup$
    – Ian Bush
    Commented Jul 20, 2021 at 9:55
  • $\begingroup$ @IanBush Oh, I wasn't very clear in my post. I have two sets of eigenpairs, one set for the Hessian and one set for the Mass-weighted Hessian. I got the eigenpairs using python's numpy.linalg.eig. So I have: 1) A list of vibrational modes (eigenvalues of the Mass-weighted Hessian) and the corresponding eigenvectors 2) A list of force constants (eigenvalues of the Hessian) and the corresponding eigenvectors. I'm trying to figure out which eigenpair from the Hessian matches which eigenpair from the Mass-weighted Hessian, so I then know the force constant for each vibrational mode $\endgroup$ Commented Jul 20, 2021 at 21:43
  • 1
    $\begingroup$ The eigenvectors between the Hessian and Mass-weighted Hessian should be related. I'm just struggling to find what that relationship is. For example, if I just had two C atoms, I figured the eigenvectors would be related by a factor of 12.011 or sqrt(12.011). If that were true then I could easily take an eigenvector from the mass-weighted hessian, multiply by this factor, and just solve for the eigenvalue of the non-mass-weighted hessian. When I tried this, multiplying the eigenvector for the mw-hessian by 12.011 or sqrt(12.011) didn't yield an eigenvector from the non-mw-hessian. $\endgroup$ Commented Jul 20, 2021 at 22:09
  • 1
    $\begingroup$ +1 But you should mention that you used python in the question, and post a code snippet if possible. If you don't get any answers here, you may also want to check out Matter Modelling SE. $\endgroup$
    – S R Maiti
    Commented Jul 21, 2021 at 3:25
  • 1
    $\begingroup$ @NicholasH. Normal modes and their eigenvalues and eigenfrequencies are based on the mass weighted Hessian. I think the only case where you can use directly the unweighted Hessian is, the case when all particles have the same mass, which isn't the case for molecules in general. You can define a reduced mass and transform afterwards from the mass weighted modes to Cartesian displacement normal modes. These Cartesian displacement modes are what people typically indicate with vectors on atoms to illustrate normal modes. $\endgroup$
    – Hans Wurst
    Commented Jul 23, 2021 at 7:16

1 Answer 1


I'll avoid extending the comment section by posting this as an answer. But this is mostly intended to address your last comments.

The actual value of the reduced masses associated with normal modes depends on the convention that you are using. There is not a single "true" value for the reduced mass, it is a property that we define for convenience. It is not a physically measurable quantity in the case of vibrations of polyatomic molecules. The value of the force constant changes with your choice for the reduced mass, since we have $$ k_i = \mu_i \omega_i^2 $$

This should always hold true and needs to be consistent. If this does not hold, your are doing something wrong. Per default, when we diagonalize the mass weighted Hessian, we more or less have all reduced masses equal to 1. The force constants are then simply the angular frequencies squared. If you introduce reduced masses, your force constant has to scale according to this equation.

You also shouldn't diagonalize directly the Hessian matrix. The resulting eigenvectors do not lead to decoupled equations of 1D harmonic oscillators. This is due to the fact that the mass matrix does in general not commute with the matrix of eigenvectors of the unweighted Hessian. There is a special case when this works, and that is the case when all atoms have the same mass. In this special case, the mass matrix commutes with any matrix since it is simply a multiple of the unity matrix. In all other cases you do not obtain the proper eigenvalues and eigenvectors when using the unweighted Hessian matrix.

Force constants are thus based on the eigenvalues of the mass weighted Hessian and the choice of reduced mass. You do not obtain the force constants from the unweighted Hessian matrix in the general case.

The underlying math of what I said can be found here,

How is the vibration of multiple atoms treated in vibrational spectroscopy?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.