# Is this a bug in eig?

5 views (last 30 days)

Show older comments

Kenneth Johnson
on 30 Mar 2021

Commented: Kenneth Johnson
on 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 Comments

### Accepted Answer

Matt J
on 30 Mar 2021

Edited: Matt J
on 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 Comments

Bruno Luong
on 31 Mar 2021

Edited: Bruno Luong
on 31 Mar 2021

### More Answers (0)

### See Also

### Categories

### Products

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!