Re: Eigenvalue

*To*: mathgroup at smc.vnet.net*Subject*: [mg14191] Re: [mg14170] Eigenvalue*From*: Carl Woll <carlw at fermi.phys.washington.edu>*Date*: Wed, 30 Sep 1998 19:42:23 -0400*Sender*: owner-wri-mathgroup at wolfram.com

Hi, 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[ Solve,Transpose[{Rest[Thread[clist==0]],{lam1,lam2}}],1 ] ] /. 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 > > >