>> (A_0 + lambda A_1 + lambda^2 A_2 + ... + lambda^p A_p) x = 0,
>>
>> where:
>> p is a given integer,
>> each coefficients A_i is a given N x N (real or complex) square matrix.
> eigs = Sort[NSolve[Det[mat]]];
>
> Get corresponding eigenvectors by using NullSpace:
>
> eigvecs = Join @@ NullSpace /@ (mat /. Union[eigs]);
>
> The Sort and Union commands are there in case there are repeated
> eigenvalues.
Hi Carl,
Thanks so much for your very elegant method.
Since my original post, I came to understand there was a fairly
basic linearization method and coded that up as well as your approach.
Linearization took me about 10 lines of codes, as
opposed to your `one liners'.
I tried some random matrix data. Agreement was perfect
between your approach and my linearization method
for p = 5 and N = 10, using the notation at the top for p and N.
However, the running time for the linearization was
quite a bit faster, which surprised me.
Then, I couldn't get your method to work for N > 10
even though the basic linearization approach seemed
fine. For N >= 12, your method never returned.
At first, I thought that perhaps just NSolve was slow and
so replaced it with Roots//N. This did not help.
Upon further investigation, it seems that
(i) the (partially symbolic) Det[mat] would never return for N >= 12.
For N = 11, Det[mat] would return, but
(ii) the NullSpace operator would not always
return a list of Dimension {p N, 1, N}. Instead,
NullSpace would return some empty {} entries and this would break
the method.
As I like your compact notation, if you agree with these problems,
I wonder if you have some suggestions to overcome them?
regards,
alan