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

本文探讨了在Matlab和LAPACK中解决矩阵广义特征值问题的方法,重点介绍了QZ分解。在Matlab中,eig()函数用于一般和广义特征值计算,而LAPACK提供了多个函数如dhgeqz、dgges等处理广义特征值问题。文章通过实例展示了函数的使用,并提到了Matlab与LAPACK在QZ分解结果上的差异。
摘要由CSDN通过智能技术生成

广义特征值问题,即Ax= image046.gif 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值