MathGroup Archive 1998

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Eigenvalue


I have a suggestion. However, I don't think the problem you pose is not
necessarily doable in general. You say you have 9x9 matrix with 3
parameters, and you want to find the eigenvalues to second order in two
of the parameters. But, even at 0th order in these two parameters, you
will be trying to find the eigenvalues of a 9x9 symbolic matrix which
will involve solving the nonic equation, and this isn't possible in
general. Finding the eigenvalues of a 9x9 numeric matrix is of course
doable, so I will assume that you are trying to find the eigenvalues to
second order in all of the parameters.

To keep things simple, I will deal with a matrix containing only 2
parameters. The extension to more than 3 parameters should is trivial.
Then, let m be the the nxn matrix, with parameters s and g, for which
you want to find the eigenvalues. 

1. The first step is to find the characteristic polynomial,

poly = Det[m - lambda IdentityMatrix[n]]

2. The second step is to truncate the characteristic polynomial at
second order. The simplest way to do this is to scale your parameters
by a common value t, expand lambda into a series in t, and then do a
series expansion in t. Thus, if you want to work to second order, you
would form the truncated polynomial with the following. 

trunc_poly = (poly /. {s->t s, g->t g, lambda->lam0+lam1 t+lam2 t^2}) 
             + O[t]^3

3. Now, you should have a power series to second order in t, and all you
need to do is to find the values of lam0, lam1 and lam2 which make each
of the terms of the series 0. The zeroth order term should be a simple
polynomial in lam0 which mathematica will be able to solve numerically.
The first order term will be linear in lam1, and so is trivial to solve
for lam1. Similarly, the second order term will be linear in lam2, and
is trivial to solve. A procedure to do this is as follows. Use
CoefficientList to isolate the terms of the series.

clist = CoefficientList[trunc_poly, t];

Solve for the lam#:

soln = Solve[clist==0, {lam0,lam1,lam2}]

I tried the above procedure on the following test case:

m = Table[Random[] s^Random[Integer,1] g^Random[Integer,1],{6},{6}];

and it worked, although it was pretty slow. You could speed things up by

soln0 = Solve[clist[[1]]==0,lam0];
soln = Flatten[Apply[
              ] /. soln0;

which worked instantly on a 9x9 test case.

Carl Woll
Dept of Physics
U of Washington

On Wed, 30 Sep 1998, RENZONI_FERRUCCIO wrote:

> Dear MathUsers,
> I have a 9x9 real matrix M containing 3 parameters (say, s, g and b).
> I would like to find an analytic expression for the eigenvalues of M at
> the second order in the parameters s and g (the expansion is around s=0
> and g=0). I tought to find the eigenvalue as Root objects and then to
> expand them in Taylor series. For some eigenvalue works fine, for some
> other not. I obviously verified numerically that all the eigenvalues
> exist and are finite.
> Are there other way to find eigenvalues at a given order in the
> parameters without using Root object?
> E-mail to me directly please.
> Thanks a lot,
> Ferruccio Renzoni

  • Prev by Date: Use of Fortran formats in ReadList
  • Next by Date: Accents in Postscript
  • Previous by thread: Eigenvalue
  • Next by thread: Re: Eigenvalue