gh688 发表于 2007-6-18 19:39

求特征值和特征向量的精确算法

我现在求特征值和特征向量比较精确的算法,本来我是用matlab中的eig命令来计算的
,后来感觉这样精度不好,所以请各位指导一下.

咕噜噜 发表于 2007-6-18 19:44

精度不够?你想要多高精度?
还有你说的精度指什么?

无水1324 发表于 2007-6-18 20:23

回复 #1 gh688 的帖子

应该比较精确了,
format long

或者你直接根据定义一步步算

gh688 发表于 2007-6-18 21:02

1.不好意思,我说的不是太清楚.因为我是用状态空间法计算特征值和特征向量.
所以求的是eig(inv(A)*B)的特征值和特征向量.A和B是稀疏矩阵,其实我的想法是:
这里要求一次A的逆,然后又要求inv(A)*B的特征值和特征向量.这样在计算过程中是很多
次的迭代过程.这样误差是不是太大了.其实这好象是一个广义特征值的问题,那有没有解决
广义特征值的好方法(实用).
2.其实我还有一个问题一直不明白,就是 matlab 中计算矩阵特征值和特征向量是用的啥样的
迭代过程.
3.我只是具备矩阵论的初级水平,不是数学专业,提的问题如果很傻请见谅

咕噜噜 发表于 2007-6-18 21:12

回复 #4 gh688 的帖子

你这个是什么问题求特征值?eig(inv(A)*B),这个命令这个用法不多啊
能不能提供你的问题啊
其实要说 matlab 中计算矩阵特征值和特征向量用的什么过程,我觉得应该是归一划的过程吧,迭代?我不知道

gh688 发表于 2007-6-18 21:21

我的问题其实是求包含非比例阻尼的振动微分方程MX''+CX'+KX=0的求解,因为有个阻尼项,所以最后写成状态
方程的形式:AX'+BX=0
这个问题由于A和B矩阵中的元素的 大小有差别,其实A有点接近奇异矩阵,求A'就有精度问题了
结果计算出来的特征值和特征向量我感觉有点不准确

gghhjj 发表于 2007-6-19 02:23

eig的精度还是很高的,个人认为你这里误差应该主要是由inv造成的

试试用反迭代法来求

咕噜噜 发表于 2007-6-19 08:57

回复 #6 gh688 的帖子

有阻尼的系统固有频率的求解论坛里面有相应的程序,以前有类似的问题帖子,你找找看
可能你的算法有问题

gh688 发表于 2007-6-19 19:57

这里我感谢各位的帮助

无水1324 发表于 2007-6-19 19:59

回复 #9 gh688 的帖子

问题已经解决,那你说说你的解决办法,可以给我们一点参考哈

gh688 发表于 2007-6-19 20:06

问题还没有解决,我还在做,搞定了我会和大家交流

无水1324 发表于 2007-6-19 21:44

回复 #11 gh688 的帖子

那你继续加油了!

gghhjj 发表于 2007-6-20 06:54

原帖由 gh688 于 2007-6-19 20:06 发表 http://www.chinavib.com/forum/images/common/back.gif
问题还没有解决,我还在做,搞定了我会和大家交流

期待

hunter_009 发表于 2007-6-20 10:45

我认为其中应该会用到奇异值分解.如果是接近奇异的话.

appleseed05 发表于 2007-6-20 14:47

这个我可以说一说
matlab的eig命令精度还是相当高的
在计算一般的矩阵,比如对称正定阵,其采用QR分解方法
在计算比较病态的或者比较恶心的矩阵比如非对称非正定其采用QZ分解方法,中间分解酉空间是采用迭代方法。
对于性质比较好的矩阵计算是很准的,但是对于比较病态的由于数值原因,无论什么算法,高阶特征值都是不很准的,相对来说此时采用子空间迭代和laczos方法可能更好一些。
我个人编过各种算法计算特征值的程序(迭代和分解的都有),准确度上都没有matlab的eig高,所以总结下来matlab的eig可以比较放心的使用
页: [1] 2
查看完整版本: 求特征值和特征向量的精确算法