我使用SciPy的linalg.qz
函数来生成病态广义特征值问题的特征值,该问题使用两个输入矩阵A、B。
函数的SciPy documentation给出了4个要拆包的数量:
AA, BB, Q, Z = linalg.qz(A,B)
AA和BB分别表示A和B的广义Schur形式。
Q和Z分别表示左和右Schur向量。
当查看该函数的Matlab实现时,存在两个额外的返回V和W,其列是广义特征向量:
[AA,BB,Q,Z,V,W] = qz(A,B)
由于这两个返回值不可能直接从linalg.qz
函数中得到,那么从左、右舒尔向量中提取广义特征向量的最有效方法是什么?
2条答案
按热度按时间fxnxkyjh1#
答案就在qz算法的原始论文中,你可以参考https://epubs.siam.org/doi/abs/10.1137/0710024?journalCode=sjnaam第251页的第5步,Fortran代码也可以在这篇论文的旧版本中找到。
yeotifhr2#
我遇到了同样的问题,最终转向了scipy提供的低级LAPACK函数。
在matlab中,这些量可以被找到为
在python中,同样的结果可以通过
不同版本的LAPACK ggev函数取决于数据类型(真实的与复数,单精度与双精度)。文档here以及其他许多地方。