abiu_608 发表于 2007-12-11 15:41

Matlab中eig命令问题

问题:
想 实现 判断矩阵是否有重根

定义 A=;
       =eig(A);

    按理论计算 A矩阵应该有一个2重的特征值:-1
    可是为什么 用命令 D(1,1)==D(2,2) 得到的结果是:
ans=
      0

????? 盼高手指点...

sigma665 发表于 2007-12-11 15:55

D(1,1)=D(2,2)=-1
答案对的啊

命令 D(1,1)==D(2,2)这是什么命令?

abiu_608 发表于 2007-12-11 16:10

回复 #2 sigma665 的帖子

D(1,1)==D(2,2)是判断 2个数 是否相等的命令
如果相等 就得到结果 :1
       如果不相等 结果就是:0

用=eig(A) 得到的结果是2个:-1
但是用上面的命令 得到的结果是:0

我想是不是还有小数点后面的数字..

sigma665 发表于 2007-12-11 16:26

回复 #3 abiu_608 的帖子

>> D(1,1)-D(2,2)

ans =

-1.4433e-015

我减了一下,果然有非常小的数

abiu_608 发表于 2007-12-11 16:30

原帖由 sigma665 于 2007-12-11 16:26 发表 http://www.chinavib.com/forum/images/common/back.gif
>> D(1,1)-D(2,2)

ans =

-1.4433e-015

我减了一下,果然有非常小的数

:@Q理论上是有重根的

可是在M文件里要怎么判断呀???

明明相等,可是Matlab判断出来不相等,郁闷~~

如果矩阵本来就有2个很相近的特征值,那岂 不是要 混淆了???:@Q

sigma665 发表于 2007-12-11 16:45

看误差是e-15级别的,很小了,可以认为是相等的

花如月 发表于 2007-12-11 16:49

回复 #5 abiu_608 的帖子

计算的误差是难免的,和sin(pi)不等于0的道理差不多。想解决这个问题,你稍微搜索下版面就知道了。不要只顾着问,要多动手,多思考。

abiu_608 发表于 2007-12-11 16:57

原帖由 花如月 于 2007-12-11 16:49 发表 http://www.chinavib.com/forum/images/common/back.gif
计算的误差是难免的,和sin(pi)不等于0的道理差不多。想解决这个问题,你稍微搜索下版面就知道了。不要只顾着问,要多动手,多思考。

:@Q
    我知道有误差但是

:@Q 要是矩阵本来就有2个很相近,很相近的特征值,怎么办??

eight 发表于 2007-12-11 17:06

原帖由 abiu_608 于 2007-12-11 16:57 发表 http://www.chinavib.com/forum/images/common/back.gif


:@Q
    我知道有误差但是

:@Q 要是矩阵本来就有2个很相近,很相近的特征值,怎么办??
两个数如果相差很小,就认为是同一个数,用这个观点编写你的程序

abiu_608 发表于 2007-12-11 17:09

原帖由 eight 于 2007-12-11 17:06 发表 http://www.chinavib.com/forum/images/common/back.gif

两个数如果相差很小,就认为是同一个数,用这个观点编写你的程序


谢谢啦

牢记在心:lol :lol

[ 本帖最后由 花如月 于 2007-12-11 17:29 编辑 ]

VibrationMaster 发表于 2007-12-11 18:09

回复 #11 abiu_608 的帖子

对于简单的矩阵,用符号运算可以精确判断

Ren_S 发表于 2007-12-12 15:19

一个比较笨的方法,再做一层条件判断,比较两数之差与一个极小值(自定义)大小,就认为大于不等,小于等。其实C中对于float型相等不也是这么做的吗
页: [1]
查看完整版本: Matlab中eig命令问题