声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2858|回复: 18

[编程技巧] 求教关于求解矩阵特征值的问题

[复制链接]
发表于 2014-6-27 10:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
计算一个矩阵的特征值和特征向量时,其中特征值包含了虚数,本人会过滤掉虚数特征值,但是不会得到对应的特征向量, 请问怎么改?
请各位大虾指导一下。谢谢
回复
分享到:

使用道具 举报

发表于 2014-6-27 22:15 | 显示全部楼层
[v d]=eig(A);v的每一列为d中特征值对应的特征向量,找到对应的虚数特征值,就可以对应找到虚数的特征向量
 楼主| 发表于 2014-6-28 21:58 | 显示全部楼层
chybeyond 发表于 2014-6-27 22:15
[v d]=eig(A);v的每一列为d中特征值对应的特征向量,找到对应的虚数特征值,就可以对应找到虚数的特征向量

只能慢慢找吗?能不能编个程序,除去虚数特征值及对应的特征向量,得到实数特征值,同时得到对应的特征向量?因为得到的特征值太多了,一个个去找不是很方便。
发表于 2014-6-28 21:59 | 显示全部楼层
江山美人 发表于 2014-6-28 21:58
只能慢慢找吗?能不能编个程序,除去虚数特征值及对应的特征向量,得到实数特征值,同时得到对应的特征向 ...

特征值和特征向量是一一对应的
 楼主| 发表于 2014-6-28 22:03 | 显示全部楼层
chybeyond 发表于 2014-6-28 21:59
特征值和特征向量是一一对应的

我的想法是在过滤掉虚数特征值的时候,能不能把对应的向量也过滤掉?
发表于 2014-6-28 22:23 | 显示全部楼层
江山美人 发表于 2014-6-28 22:03
我的想法是在过滤掉虚数特征值的时候,能不能把对应的向量也过滤掉?
  1. [v d] = eig(a);
  2. d = diag(d);
  3. for ii = 1:length(d)
  4.     x(ii) = isreal(d(ii));
  5. end
  6. v = v(:, x);
复制代码


评分

1

查看全部评分

 楼主| 发表于 2014-6-28 22:29 | 显示全部楼层

我试试啊,谢谢了
 楼主| 发表于 2014-6-28 22:50 | 显示全部楼层

效果明显,谢谢啊
 楼主| 发表于 2014-6-29 09:01 | 显示全部楼层
如果过滤了虚数特征值,我按升序重新排列了一下剩下的特征值,那对应的特征向量怎么也能重新排一下啊?
发表于 2014-6-29 09:32 | 显示全部楼层
江山美人 发表于 2014-6-29 09:01
如果过滤了虚数特征值,我按升序重新排列了一下剩下的特征值,那对应的特征向量怎么也能重新排一下啊?
  1. [d  indx]=sort(d);
  2. v = v(:, indx);
复制代码
 楼主| 发表于 2014-6-29 09:40 | 显示全部楼层

a=magic(4);
[v,d] = eig(a);
d = diag(d);
for ii = 1:length(d)
    x(ii) = isreal(d(ii));
end
v=v(:, x)
出现这个问题了,下标索引必须为正整数类型或逻辑类型。这个没有不适整数啊,昨晚上好像还是可以计算运行的,现在又不行了
 楼主| 发表于 2014-6-29 10:19 | 显示全部楼层

好像是每运行一次,都要清除一次命令,才可以再运行
发表于 2014-6-29 10:22 | 显示全部楼层
江山美人 发表于 2014-6-29 10:19
好像是每运行一次,都要清除一次命令,才可以再运行

可能你工作空间有变量x,但不是logical型的,运行前clear all或者clear x
 楼主| 发表于 2014-6-29 10:34 | 显示全部楼层
chybeyond 发表于 2014-6-29 10:22
可能你工作空间有变量x,但不是logical型的,运行前clear all或者clear x

嗯,我试试,谢谢
 楼主| 发表于 2014-6-29 10:43 | 显示全部楼层
本帖最后由 牛小贱 于 2014-6-29 13:11 编辑
chybeyond 发表于 2014-6-29 10:22
可能你工作空间有变量x,但不是logical型的,运行前clear all或者clear x

求得特征值之后,需要开个平方才可以得到虚数特征值,我过滤了虚数特征值,再按升序重新排列了一下剩下的特征值,最后求得排列后的特征值及特征向量,程序是下面这个吗,有点问题啊,索引超出矩阵维度。再请指教一下,谢谢
  1. clear all
  2. a=magic(5);
  3. [v,d] = eig(a);
  4. d = sqrt(diag(d));
  5. for k = 1:length(d)
  6.     x(k) = isreal(d(k));
  7. end
  8. v = v(:, x);
  9. [d,indx]=sort(d);
  10. v = v(:,indx)
复制代码


您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 17:17 , Processed in 0.057554 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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