From: Peter Spellucci on 8 Feb 2010 06:50 In article <3f37cb36-e017-4df2-9a61-5ae9664ec2c1(a)36g2000yqu.googlegroups.com>, goodjeff <jiang1feng(a)gmail.com> writes: >Dear all, > > Given a real symmetric matrix A, the eigenvector, V_min, for the >minimum eigenvalue, Lambda_min, need to be calculated. > > Surely there are various numerical algorithms to calculate it, but >my impression is that if the minimum eigenvalue is very close to 0, >the solution is not numerically stable (the resulting V_min might be >very different from the ideal one). > > I am thinking if there is a way to rearrange the matrix A to be B, >who has the same eigenvectors but A's V_min now becoming V_max, >corresponding to its biggest eigenvalue, whose numerical solution is >more reliable. > >Thanks >Jeff no, you should not "rearrange" the matrix, this indeed could be deadly. and it depends: the smallest eigenvalue: you mean the smallest in absolute value? your posting suggests that. The matrix: is it positive semidefinite such taht you assume this eigenvalue is nonnegative? If this is the case, then do "inverse iteration" with shift zero: This goes as follows: x(0) is the initial vector. if you know something about its structure then choose it accordingly (for example in a vibration problem, if the basic mode is required, a vector with all components positive and the "middle" ones larger than those corresponding to the boundaries of the structure would be a choice) x(0) becomes normalized to length one. then you iterate: for k=0,1,2,...until sufficient precision in rho(k) and x(k) is obtained solve Ay(k+1) = x(k) ; (**) compute rho(k) = y(k+1)^Tx(k); /* this is the Rayleighquotient and the optimal guess for the eigenvalue */ x(k+1) = y(k+1)/norm(y(k+1),2) ; In order to solve the linear system (**) , you use a stable decomposition of A: since A is symmetric in case of the positive semidefiniteness Cholesky with diagonal pivoting P^T A P = L L^T (if the smallest eigenvalue is simple, then in the extreme case the last diagonal element of L will be in the order of the machine precision times matrix norm) otherwise if the dimension is not too large the QR decomposition. The speed of convergence is the determined by the quotient lambda_min/lambda_next_min. If the smallest eigenvalue can have multiplicity >1, then you need to perform "simultaneous inverse iteration" (essentially the same thing, but with a matrix x(k) of columns at least as large as the multiplicity, better larger. (this then needs reorthogonalization of x(k) in each step and concerning the rayleighquotient: this must be replaced by a matricial one .. for the first, lets postpone this). hth peter
|
Pages: 1 Prev: Call to Matlab functions from C/C++ Next: Automatically display data cursor on compass plot |