Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

How eigenvectors are normalized

703 views
Skip to first unread message

Ben Blomberg

unread,
May 24, 2013, 5:29:09 AM5/24/13
to

Dear Mathgroup,

When I use the function "Eigenvectors" how are the eigenvectors normalized?
Is it Euclidean norm equal to 1, with the largest component has imaginary
part equal to zero?

Thanks,
Ben


Bill Rowe

unread,
May 25, 2013, 5:36:19 AM5/25/13
to
On 5/24/13 at 6:27 AM, bblo...@mail.bradley.edu (Ben Blomberg)
wrote:

>When I use the function "Eigenvectors" how are the eigenvectors
>normalized? Is it Euclidean norm equal to 1, with the largest
>component has imaginary part equal to zero?

From the documentation:

For approximate numerical matrices m, the eigenvectors are normalized.

which is easily verified by:

In[1]:= m = RandomReal[1, {3, 3}];
v = Eigenvectors[m];
Norm /@ v

Out[3]= {1.,1.,1.}


Nasser M. Abbasi

unread,
May 25, 2013, 5:31:12 AM5/25/13
to
In Mathematica, they are normalized so that Euclidean norm of
each is 1

--------------------------
In[120]:= k = {{300, 100}, {100, 200}};
m = {{4, 1.}, {1, 3}};
{lam, phi} = Eigensystem[{k, m}];
phi = Transpose[phi];
Norm[phi[[;; , #]]] & /@ Range[2]

Out[124]= {1., 1.}
------------------------

But it is more common, at least in engineering and modal analysis,
is to "mass" normalize them. when the eigenvectors are mass normalized,
then phi'*m*phi will give the identity matrix and phi'*k*phi will
give a diagonal matrix with square of the eignevalues (lam here) on
the diagonal.

This is what that "other" software does by default:

----------------
EDU>> m=[4 1;1 3];
EDU>> k=[300 100;100 200];
EDU>> [phi,lam]=eig(k,m);
EDU>> phi.'*m*phi

1.0000 0.0000
-0.0000 1.0000

EDU>> phi.'*k*phi
58.0179 -0.0000
0.0000 78.3458

EDU>> phi
0.3406 -0.3958
-0.5512 -0.2446
-------------------------

But it is easy to make the Mathematica eigenvectors be mass normalized.
Simply find phi'*M*phi for each eigenvector and call this mu. Then
divide each phi by mu. This gives you the "mass" normalized eigenvector.

---------------------------
phi[[1 ;; All, #1]]/
Sqrt[phi[[1 ;; All, #1]].m.phi[[1 ;; All, #1]]] & /@ Range[2]

Out[135]= {{-0.395843, -0.244644},
{0.34064, -0.551167}}

In[139]:= phii.m.Transpose[phii] // Chop
Out[139]= {{1., 0}, {0, 1.}}

In[140]:= phii.k.Transpose[phii] // Chop
Out[140]= {{78.3458, 0}, {0, 58.0179}}
-------------------------

--Nasser



0 new messages