I obtained 6 eigenpairs of a matrix using eigs of Matlab. How can I demonstrate that these eigenvectors are orthogonal to each other? I am almost sure that I normalized in the right way modulus and phase but they do not seem to be orthogonal. The matrix should be normal. The matrix comes from the discretization of the Euler-Bernoulli beam problem for a beam of length 1 with hinged free boundary conditions: $$ \frac{\partial u }{\partial t} + \gamma \frac{\partial^4 y}{\partial x^4} = 0,\\ \frac{\partial y}{\partial t} - u = 0.\\$$ Then, the eigenproblem can be written as:

$$ \lambda \left[ \begin{matrix} I & 0 \\ 0 & I \end{matrix} \right] \left\{ \begin{matrix} y \\ u \end{matrix} \right\} = \left[ \begin{matrix} 0 & I \\ -\gamma B & 0 \end{matrix} \right] \left\{ \begin{matrix} y \\ u \end{matrix} \right\},$$ where $I$ is the identity matrix and $B$ is the bilaplacian operator discretized using finite difference.

  • 4
    $\begingroup$ Are you asking how to prove that they should be orthogonal or how to verify (numerically) that they are? $\endgroup$ Jun 5, 2015 at 18:54
  • 1
    $\begingroup$ Compute the inner product (dot product) between the eigenvectors and you should obtain the Kronecker delta (since they are already normalized). This would work both, analytically and numerically. Of course, in the numerical case you would obtain approximate results. Also, there is no need to sign the posts. They are already signed by your username. $\endgroup$
    – nicoguaro
    Jun 5, 2015 at 19:43
  • $\begingroup$ I want to verify it numerically. If I compute the inner product between two eigenvectors that are associated to two distinct eigenvalues shouldn't I obtain zero? $\endgroup$
    – Britomarti
    Jun 5, 2015 at 20:08
  • 1
    $\begingroup$ You shouldn't expect precisely zero, either. $(u,v)/\|u\|\|v\|$ should at best be around the machine precision assuming $u$ and $v$ aren't near zero themselves. $\endgroup$
    – Bill Barth
    Jun 5, 2015 at 22:48
  • 2
    $\begingroup$ Yes, that is what this means. Even if a differential operator is self-adjoint, its discretization need not be. (For example, modifying the matrix to incorporate boundary conditions can destroy the symmetry properties.) $\endgroup$ Jun 6, 2015 at 10:16

2 Answers 2


If the matrix is normal (i.e., $A^HA=AA^H$), you should indeed get orthonormal eigenvectors both theoretically or numerically. You can check this by numerically by taking the matrix V built from columns of eigenvectors obtained from [V,D] = eigs(A) and computing V'*V, which should give you (very close to) the identity matrix.

The fact that you are not observing orthogonality most likely is due to the matrix not being normal (which you can also check numerically, e.g., by norm(A'*A-A*A','fro')). This is not unsurprising: Although your differential operator (in particular, the bilaplacian) is self-adjoint, this need not be the case for its discretization. In particular, most ways of modifying the stiffness matrix (in your case, $B$) to incorporate Dirichlet boundary conditions destroys the symmetry.


When you are dealing with complex valued vectors, the inner product is probably defined as $(u,v)=u_1^*v_1+...+u_n^*v_n$, where * indicates the complex conjugate. For example, the vector $u=(1,i)$ is not orthogonal to $v=(-i,1)$, because $(u,v)=1(-i)+(i)^*(1)=-2i$. On the other hand, $u$ is orthogonal to $w=(i,1)$. You cannot just use the ordinary "dot product" to show complex vectors are orthogonal.

Consider the test matrix $\left(\begin{matrix}1& -i \\ i& 1\end{matrix}\right)$. This matrix is Hermitian and it has distinct eigenvalues 2 and 0 corresponding to the eigenvectors $u$ and $w$ respectively. You can use this test matrix and its eigenvectors in Matlab to verify you calculating an inner product rather than what I call the ordinary "dot product."

Also note, the inner product is defined as above in physics. That's why I said "probably defined as". Mathematicians are more likely to define the inner product on complex vector spaces as $(u,v)=u_1v_1^*+...+u_nv_n^*$, which is just the complex conjugate of the one I defined above.

  • 1
    $\begingroup$ For complex vector spaces, what you describe is the "ordinary dot product" (up to complex conjugation, which makes no difference with respect to orthogonality), and Matlab does precisely that when you write u'*v. You have to explicitly ask for the "real dot product" by writing u.'*v. $\endgroup$ Jun 7, 2015 at 9:18

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.