糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > LAPACK(5)——矩阵广义特征值问题和QZ分解

LAPACK(5)——矩阵广义特征值问题和QZ分解

时间:2022-06-24 09:30:54

相关推荐

LAPACK(5)——矩阵广义特征值问题和QZ分解

广义特征值问题,即Ax= Bx,

在Matlab中,使用eig()求解一般特征值问题和广义特征值。[V,D] = eig(A,B,flag), A和B时方阵,flag用来选择算法,qz表示选择使用QZ算法。

也可以直接调用qz()来求解,[AA,BB,Q,Z,V] = qz(A,B,flag), flag 表示使用复数或实数计算,默认取值为复数。

在Lapack中,有四个函数都是用来求解广义特征值的,

?GEGS Computes the generalized eigenvalues, Schur form, and left and/or right Schur vectors for a pair of non-symmetric matrices.?GGES Computes the generalized eigenvalues, Schur form, and left and/or right Schur vectors for a pair of non-symmetric matrices.?GEGV Computes the generalized eigenvalues, and left and/or right generalized eigenvectors for a pair of non-symmetric matrices.?GGEV Computes the generalized eigenvalues, and left and/or right generalized eigenvectors for a pair of non-symmetric matrices.

区别在于前两个分解之后会输出舒尔形式,后两个则输出广义特征向量。而且gegs和gegv都被gges和ggev代替。两个都会用QZ分解求解广义特征值。

LAPACK也给出了QZ分解的函数dhgeqz,但要求输入H,T矩阵,对于一般的方阵,可以使用dgghrd将输入的方阵A,B变换成H,T矩阵。

下面给出这四个函数的原型和测试程序。

#include <iostream>

#include <iomanip>

#include <cmath>

#include <complex>

using namespace std;

typedef complex<double> dcomplex_t;

//lapacke headers

#include "lapacke.h"

#include "lapacke_config.h"

#include "lapacke_utils.h"

extern "C" {

lapack_int LAPACKE_dggev( int matrix_order, char jobvl, char jobvr,

lapack_int n, double* a, lapack_int lda, double* b,

lapack_int ldb, double* alphar, double* alphai,

double* beta, double* vl, lapack_int ldvl, double* vr,

lapack_int ldvr );

lapack_int LAPACKE_dgges( int matrix_order, char jobvsl, char jobvsr, char sort,

LAPACK_D_SELECT3 selctg, lapack_int n, double* a,

lapack_int lda, double* b, lapack_int ldb,

lapack_int* sdim, double* alphar, double* alphai,

double* beta, double* vsl, lapack_int ldvsl,

double* vsr, lapack_int ldvsr );

lapack_logical selectg(const double* AR,const double* AI,const double* B){

if

如果觉得《LAPACK(5)——矩阵广义特征值问题和QZ分解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。