Is this a bug in eig?
    7 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Kenneth Johnson
      
 il 30 Mar 2021
  
    
    
    
    
    Commentato: Kenneth Johnson
      
 il 31 Mar 2021
            This issue came up with the roots function (see roots_ on File Exchange), where eig was failing on the companion matrix.  Following are two test cases; the first one works and the second one doesn't.  (I reported this to tech support, but it's not listed in the official Matlab bug reports.)
a = [-1,-1,0;1,0,0;0,1,0];
a(1,3) = 10e-32;
[v,d] = eig(a);
disp(abs(a*v-v*d))
%    1.0e-15 *
%    0.055511151231258   0.055511151231258   0.000000000000000
%    0.166533453693773   0.166533453693773   0.000000000000000
%    0.138777878078145   0.138777878078145                   0
disp(num2str(diag(d)))
%  -0.5+0.86603i
%  -0.5-0.86603i
% 1e-31+0i 
a(1,3) = 9e-32;
[v,d] = eig(a);
disp(abs(a*v-v*d))
%    0.000000000000000   0.000000000000000   0.000000000000000
%    0.000000000000000   0.000000000000000   0.000000000000000
%    0.707106781186548   0.707106781186548   0.000000000000000
disp(num2str(diag(d)))
% -0.5+0.86603i
% -0.5-0.86603i
%    0+0i 
0 Commenti
Risposta accettata
  Matt J
      
      
 il 30 Mar 2021
        
      Modificato: Matt J
      
      
 il 30 Mar 2021
  
      It's fine. You just need to disable balancing:
a = [-1,-1,0;1,0,0;0,1,0];
for e=[10e-32, 9e-32]
 a(1,3) = e;
 [v,d] = eig(a,'nobalance');
 Discrepancy = abs(a*v-v*d)
end
13 Commenti
  Bruno Luong
      
      
 il 31 Mar 2021
				
      Modificato: Bruno Luong
      
      
 il 31 Mar 2021
  
			Google I found this page where there is a paper discuss issue with banancing. Someone claims (last post) he has developped a correct balancing method in Lapack 3.5.0.
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Linear Algebra in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




