Mercurial > hg > octave-lyh
comparison scripts/polynomial/polyeig.m @ 15187:045ae93e8fe9
polyeig: return eigenvectors of the _correct_ size
author | Ed Meyer <eem2314@gmail.com> |
---|---|
date | Thu, 19 Jul 2012 04:53:34 +0100 |
parents | 504fec921af5 |
children | 2ad5e6212cd7 |
comparison
equal
deleted
inserted
replaced
15186:504fec921af5 | 15187:045ae93e8fe9 |
---|---|
63 % solve generalized eigenvalue problem | 63 % solve generalized eigenvalue problem |
64 if ( isequal (nargout, 1) ) | 64 if ( isequal (nargout, 1) ) |
65 z = eig (C, D); | 65 z = eig (C, D); |
66 else | 66 else |
67 [ z, v ] = eig (C, D); | 67 [ z, v ] = eig (C, D); |
68 varargout{1} = diag (v); | 68 varargout{1} = v; |
69 % return n-element eigenvectors normalized so | |
70 % that the infinity-norm = 1 | |
71 z = z(1:n,:); | |
72 % max() takes the abs if complex: | |
73 t = max(z); | |
74 z /= diag(t); | |
69 endif | 75 endif |
70 | 76 |
71 endfunction | 77 endfunction |
72 | 78 |
73 ## sanity test | |
74 %!test | 79 %!test |
75 %! C0 = [8, 0; 0, 0]; C1 = [1, 0; 0, 0]; | 80 %! C0 = [8, 0; 0, 4]; C1 = [1, 0; 0, 1]; |
76 %! z = polyeig (C0, C1); | 81 %! [v,z] = polyeig (C0, C1); |
77 %! assert (isequal (z(1), -8), true); | 82 %! assert (isequal (z(1), -8), true); |
78 | 83 %! d = C0*v + C1*v*z |
84 %! assert (isequal (norm(d), 0.0), true); |