回 帖 发 新 帖 刷新版面

主题:请教一个特征值和特征向量的问题。

fortran计算出来的特征值和特征向量怎样才能一一对应起来?

希望能的到像matlab利用eig计算出来的那种有对应关系的eigvalue和eigvector。

注:我在IVF中用到的是EVCRG这个函数。

谁能帮解释一下啊谢谢
多谢。

回复列表 (共10个回复)

沙发

EVCRG 不是Fortran库函数,是imsl函数库的,
你可以看看imsl的文档

板凳

CALL EVCRG (A, EVAL, EVEC [,…])

A — Floating-point array containing the matrix. (Input) 
那个实矩阵

EVAL — Complex array of size N containing the eigenvalues of A in decreasing order of
magnitude. (Output) 按降序排列的特征值数组

EVEC — Complex array containing the matrix of eigenvectors. (Output)
特征向量组成的矩阵

[b]The J-th eigenvector, corresponding to EVAL(J), is stored in the J-th column. [/b]
EVEC的第J列,对应第J个特征值EVAL(J),

Each vector is normalized to have Euclidean length equal to the value one.
每个特征向量都是单位长度

3 楼

谢谢jfnano啊
我计算的结果给你看看:
matlab计算的
eigenvalues:
    0.0362    0.2409    0.2329    0.1076    0.1921    0.1835    0.1777    0.1451    0.1505
eigenvectors:
    0.0563   -0.1527   -0.0343    0.0740    0.5836   -0.5968    0.3762   -0.2995    0.2269
   -0.0038   -0.0442    0.0016   -0.9659    0.0268    0.0048   -0.0417    0.1271    0.0167
   -0.0504   -0.1072    0.0377    0.0846    0.4168    0.7455    0.4394   -0.1475   -0.2287
   -0.1069    0.0528    0.0569    0.1240    0.0624    0.1580    0.1559    0.5500    0.7631
    0.9840   -0.0009   -0.0061   -0.0010   -0.0023    0.0110    0.0005    0.0019   -0.0033
   -0.1062   -0.0016    0.0510   -0.1314   -0.1421    0.2099   -0.1851   -0.7317    0.5433
   -0.0387   -0.5837    0.7994    0.0566   -0.1998   -0.0707    0.0346    0.0641   -0.0674
   -0.0023   -0.0506   -0.0008    0.1129    0.5938    0.1074   -0.7766    0.1540    0.0174
    0.0428   -0.7856   -0.5937    0.0762   -0.2613    0.0484    0.0281    0.0819    0.1166

fortran计算结果:
eigenvalues:
    0.0362    0.1076    0.1451    0.1505    0.1777    0.1835    0.1921    0.2329    0.2409
eigenvectors:
    0.1527   -0.0343    0.5836   -0.5968   -0.3762    0.2269    0.2995   -0.0740    0.0563
    0.0442    0.0016    0.0268    0.0048    0.0417    0.0167   -0.1271    0.9659   -0.0038
    0.1072    0.0377    0.4168    0.7455   -0.4394   -0.2287    0.1475   -0.0846   -0.0504
   -0.0528    0.0569    0.0624    0.1580   -0.1559    0.7631   -0.5500   -0.1240   -0.1069
    0.0009   -0.0061   -0.0023    0.0110   -0.0005   -0.0033   -0.0019    0.0010    0.9840
    0.0016    0.0510   -0.1421    0.2099    0.1851    0.5433    0.7317    0.1314   -0.1062
    0.5837    0.7994   -0.1998   -0.0707   -0.0346   -0.0674   -0.0641   -0.0566   -0.0387
    0.0506   -0.0008    0.5938    0.1074    0.7766    0.0174   -0.1540   -0.1129   -0.0023
    0.7856   -0.5937   -0.2613    0.0484   -0.0281    0.1166   -0.0819   -0.0762    0.0428
特征向量都是一样的。。
但是特征向量就有问题了,正负号还好说,数据一样但是与特征值不一一对应。
很苦恼。

4 楼

我没用IMSL算过本证矢.
但本证矢不是唯一的, 不同也不奇怪. 可能是不同算法导致的.

5 楼

符号是无所谓的,不过两个结过肯定有一个错了,
imsl算出来特征值这里怎么没有降序排列啊,是不是输出的时候弄错了?

把结果验算一下吧

6 楼

我觉得楼主可以写一个小程序把本证矢代会本征方程验证一下是否正确.
本证矢本来就不一定相同, 例如正交化前后就不同. 使用施密特正交化时用什么顺序, 结果也会不同. 不过楼主给的结果本征值都不同就自动正交化了.

7 楼

[quote]谢谢jfnano啊
我计算的结果给你看看:
matlab计算的
eigenvalues:
    0.0362    0.2409    0.2329    0.1076    0.1921    0.1835    0.1777    0.1451    0.1505
eigenvectors:
    0.0563   -0.1527   -0.0343    0.0740    0.5836   -0.5968    0.3762   -0.2995    0.2269
   -0.0038   -0.0442    0.0016   -0.9659    0.0268    0.0048   -0.0417    0.1271    0.0167
   -0.0504   -0.1072    0.0377    0.0846    0.4168    0.7455    0.4394   -0.1475   -0.2287
   -0.1069    0.0528    0.0569    0.1240    0.0624    0.1580    0.1559    0.5500    0.7631
    0.9840   -0.0009   -0.0061   -0.0010   -0.0023    0.0110    0.0005    0.0019   -0.0033
   -0.1062   -0.0016    0.0510   -0.1314   -0.1421    0.2099   -0.1851   -0.7317    0.5433
   -0.0387   -0.5837    0.7994    0.0566   -0.1998   -0.0707    0.0346    0.0641   -0.0674
   -0.0023   -0.0506   -0.0008    0.1129    0.5938    0.1074   -0.7766    0.1540    0.0174
    0.0428   -0.7856   -0.5937    0.0762   -0.2613    0.0484    0.0281    0.0819    0.1166

fortran计算结果:
eigenvalues:
    0.0362    0.1076    0.1451    0.1505    0.1777    0.1835    0.1921    0.2329    0.2409
eigenvectors:
    0.1527   -0.0343    0.5836   -0.5968   -0.3762    0.2269    0.2995   -0.0740    0.0563
    0.0442    0.0016    0.0268    0.0048    0.0417    0.0167   -0.1271    0.9659   -0.0038
    0.1072    0.0377    0.4168    0.7455   -0.4394   -0.2287    0.1475   -0.0846   -0.0504
   -0.0528    0.0569    0.0624    0.1580   -0.1559    0.7631   -0.5500   -0.1240   -0.1069
    0.0009   -0.0061   -0.0023    0.0110   -0.0005   -0.0033   -0.0019    0.0010    0.9840
    0.0016    0.0510   -0.1421    0.2099    0.1851    0.5433    0.7317    0.1314   -0.1062
    0.5837    0.7994   -0.1998   -0.0707   -0.0346   -0.0674   -0.0641   -0.0566   -0.0387
    0.0506   -0.0008    0.5938    0.1074    0.7766    0.0174   -0.1540   -0.1129   -0.0023
    0.7856   -0.5937   -0.2613    0.0484   -0.0281    0.1166   -0.0819   -0.0762    0.0428
特征向量都是一样的。。
但是特征向量就有问题了,正负号还好说,数据一样但是与特征值不一一对应。
很苦恼。[/quote]

仔细观察,调整顺序后,两个结果可以对应起来。

fortran(imsl)的特征值是按升序排列的。但是不知道EVEC是怎么输出的,是逐列输出还是逐行输出的?是否会把列输出为行?如果没有的话,第j列对应第j个特征值。

需要把你的输出语句写出来就清楚了。

8 楼

[quote]CALL EVCRG (A, EVAL, EVEC [,…])

A — Floating-point array containing the matrix. (Input) 
那个实矩阵

EVAL — Complex array of size N containing the eigenvalues of A in decreasing order of
magnitude. (Output) 按降序排列的特征值数组

EVEC — Complex array containing the matrix of eigenvectors. (Output)
特征向量组成的矩阵

[b]The J-th eigenvector, corresponding to EVAL(J), is stored in the J-th column. [/b]
EVEC的第J列,对应第J个特征值EVAL(J),

Each vector is normalized to have Euclidean length equal to the value one.
每个特征向量都是单位长度[/quote]

能告诉我这些说明语句是从哪里找到的吗?我怎么找不到呢?我要解得是复型矩阵。

9 楼

[quote][quote]CALL EVCRG (A, EVAL, EVEC [,…])

A — Floating-point array containing the matrix. (Input) 
那个实矩阵

EVAL — Complex array of size N containing the eigenvalues of A in decreasing order of
magnitude. (Output) 按降序排列的特征值数组

EVEC — Complex array containing the matrix of eigenvectors. (Output)
特征向量组成的矩阵

[b]The J-th eigenvector, corresponding to EVAL(J), is stored in the J-th column. [/b]
EVEC的第J列,对应第J个特征值EVAL(J),

Each vector is normalized to have Euclidean length equal to the value one.
每个特征向量都是单位长度[/quote]

能告诉我这些说明语句是从哪里找到的吗?我怎么找不到呢?我要解得是复型矩阵。[/quote]

给您推荐一个网站vni,有各种语言的IMSL库的文档:
http://www.vni.com/products/imsl/documentation/index.php#fort
您要的EVCRG在这里:
http://www.vni.com/products/imsl/documentation/fort06/math/NetHelp/default.htm?turl=evcrg.htm

另外,您用Fortran求出的特征向量,实际上是和MATLAB一样的。只是排列顺序不同,并且有一些向量带了负号。

10 楼

8楼的意思可能是想要中文版. 我之前已经帖了官方vni的网址给他他都无视的.

我来回复

您尚未登录,请登录后再回复。点此登录或注册