[已解决] 请教matlab函数 eig按什么顺序输出特征值

[复制链接]
forwei618 发表于 2022-9-20 11:17:00
比如,有如下代码:
a=1; b=-2; c=-8; d=-3;
A=sym([a 0 0 0; ...
       0 b 0 0; ...
       0 0 c 0; ...
       0 0 0 d])
[VA,DA]=eig(A)
运行结果:
A =
[1,  0,  0,  0]
[0, -2,  0,  0]
[0,  0, -8,  0]
[0,  0,  0, -3]
VA =
[1, 0, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
DA =
[1,  0,  0,  0]
[0, -3,  0,  0]
[0,  0, -2,  0]
[0,  0,  0, -8]
虽然输出的特征值和特征向量能一一对应,但特征值的顺序奇怪,既不是原本的对角线,也不是按数值大小排序,也不是按绝对值大小排序。
请问eig函数输出特征值时按什么排序,谢谢!


最佳答案


cbcbcbcb 发表于 2022-9-20 11:23:03
默认情况下,eig 并不总是返回已排序的特征值和特征向量。可以使用 sort 函数将特征值按升序排序,并重新排序相应的特征向量。
请参考以下排序代码:
  1. clear;
  2. clc;

  3. A = magic(5);
  4. [V,D] = eig(A);
  5. [d,ind] = sort(diag(D));
  6. Ds = D(ind,ind);
  7. Vs = V(:,ind);
复制代码
回复此楼

3 条回复


cbcbcbcb 发表于 2022-9-20 11:23:03
默认情况下,eig 并不总是返回已排序的特征值和特征向量。可以使用 sort 函数将特征值按升序排序,并重新排序相应的特征向量。
请参考以下排序代码:
  1. clear;
  2. clc;

  3. A = magic(5);
  4. [V,D] = eig(A);
  5. [d,ind] = sort(diag(D));
  6. Ds = D(ind,ind);
  7. Vs = V(:,ind);
复制代码
回复此楼

forwei618 发表于 2022-9-20 11:25:09
cbcbcbcb 发表于 2022-9-20 11:23
默认情况下,eig 并不总是返回已排序的特征值和特征向量。可以使用 sort 函数将特征值按升序排序,并重新排 ...

谢谢回复!
也就是说,eig返回是乱序,若要有序排列,那就自己动手。是吧

cbcbcbcb 发表于 2022-9-20 11:27:24
forwei618 发表于 2022-9-20 11:25
谢谢回复!
也就是说,eig返回是乱序,若要有序排列,那就自己动手。是吧 ...

对的,就是这么个意思!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表