Matlab 退化矩阵的广义特征值问题与Jordan型

Matlab 退化矩阵的广义特征值问题与Jordan型,matlab,eigenvalue,Matlab,Eigenvalue,我正在寻找一种方法来结合两种在Matlab中实现的特征值分解方法。第一种方法实现了广义特征值问题,可按如下方式使用: [Gamma, Lambda] = eig(M1, M2); 如果矩阵M2不是退化的,这个方法返回与eig(M2^(-1)*M1)相同的答案,但是我需要使用这个广义形式,因为M2可能是退化的 我还有一个问题,即特征向量的返回矩阵是退化的,所以要得到特征值分解,我需要使用Jordan形式。如果矩阵M2没有退化,我可以使用: [Gamma, Lambda] = jordan(M2

我正在寻找一种方法来结合两种在Matlab中实现的特征值分解方法。第一种方法实现了广义特征值问题,可按如下方式使用:

[Gamma, Lambda] = eig(M1, M2);
如果矩阵M2不是退化的,这个方法返回与eig(M2^(-1)*M1)相同的答案,但是我需要使用这个广义形式,因为M2可能是退化的

我还有一个问题,即特征向量的返回矩阵是退化的,所以要得到特征值分解,我需要使用Jordan形式。如果矩阵M2没有退化,我可以使用:

[Gamma, Lambda] = jordan(M2 \ M1)
但这不起作用,因为M2是退化的

有没有办法将这两种方法结合起来,这样我就可以解决M2和Gamma都退化的情况下的特征值分解问题

UPD:最小可复制示例:

M1 = [2 -1 0; 1 0 0; 0 0 0]; M2 = [0 0 0; 0 2 -1; 0 1 0];
[Gamma, Lambda] = eig(M1, M2)
Gamma = 
     0 1 0
     0 0 0
    -1 0 1
Lambda = 
     0 0   0
     0 Inf 0
     0 0   0

在这个例子中,我认为有些特征值是无限的,但我需要一个非退化伽马。

我建议你发布一个帖子,这样你就更有可能得到帮助。贾斯汀,谢谢你,我添加了一个例子。