Fortran Coder

查看: 21186|回复: 12
打印 上一主题 下一主题

[数学库] MKL求一般非对称矩阵特征值特征向量

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2018-3-1 23:00:44 | 显示全部楼层
广义特征值的求取,需要满足一定的条件,即
Ax=λBx 有非零解。

你的算例并不能满足这一条件。因此,得不到稳定的广义特征值。

你可以换一个算例,比如
A=
0.814723686393179        0.0975404049994095        0.157613081677548        0.141886338627215        0.655740699156587
0.905791937075619        0.278498218867048        0.970592781760616        0.421761282626275        0.0357116785741896
0.126986816293506        0.546881519204984        0.957166948242946        0.915735525189067        0.849129305868777
0.913375856139019        0.957506835434298        0.485375648722841        0.792207329559554        0.933993247757551
0.632359246225410        0.964888535199277        0.800280468888800        0.959492426392903        0.678735154857774

B=
0.757740130578333        0.706046088019609        0.823457828327293        0.438744359656398        0.489764395788231
0.743132468124916        0.0318328463774207        0.694828622975817        0.381558457093008        0.445586200710900
0.392227019534168        0.276922984960890        0.317099480060861        0.765516788149002        0.646313010111265
0.655477890177557        0.0461713906311539        0.950222048838355        0.795199901137063        0.709364830858073
0.171186687811562        0.0971317812358475        0.0344460805029088        0.186872604554379        0.754686681982361


这是我在 matlab 中用 rand(5) 得到的。两者都可以得到正确的,一致的特征值
  Generalized eigenvalues :
(  -2.49319496058144      ,  0.000000000000000E+000 )
(  -1.24753056286154      ,  0.000000000000000E+000 )
( -6.653289900617956E-002 ,  0.000000000000000E+000 )
(   1.70329737840797      ,  0.000000000000000E+000 )
(   1.09592435636823      ,  0.000000000000000E+000 )

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2018-3-4 22:49:55 | 显示全部楼层
我得到的是实数特征向量
Real*8,ALLOCATABLE::VL(:,:),VR(:,:)

建议你用 lapack95 (即 MKL 中的 95 接口)有两个好处:
1. 参数简练
2. 编译器可以帮助你检查参数类型是否错误。

use lapack95
call GGEV( RA, RB, ALPHAR, ALPHAI, BETA, VL, VR  )

  Eigenvectors :
-0.81514 -0.18857  0.21030  1.00000 -0.99347
0.12299 -0.91484 -0.56855 -0.14668  0.04254
1.00000  0.32993 -0.46433  0.25260 -0.53968
-0.57390 -0.62498  1.00000 -0.94350  1.00000
0.25262  1.00000 -0.25022 -0.31995 -0.41905

matlab代码是
[V,D]=eig(A,B);

两者得到的一致。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 00:47

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表