Matlab中eig命令问题
问题:想 实现 判断矩阵是否有重根
定义 A=;
=eig(A);
按理论计算 A矩阵应该有一个2重的特征值:-1
可是为什么 用命令 D(1,1)==D(2,2) 得到的结果是:
ans=
0
????? 盼高手指点... D(1,1)=D(2,2)=-1
答案对的啊
命令 D(1,1)==D(2,2)这是什么命令?
回复 #2 sigma665 的帖子
D(1,1)==D(2,2)是判断 2个数 是否相等的命令如果相等 就得到结果 :1
如果不相等 结果就是:0
用=eig(A) 得到的结果是2个:-1
但是用上面的命令 得到的结果是:0
我想是不是还有小数点后面的数字..
回复 #3 abiu_608 的帖子
>> D(1,1)-D(2,2)ans =
-1.4433e-015
我减了一下,果然有非常小的数 原帖由 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 看误差是e-15级别的,很小了,可以认为是相等的
回复 #5 abiu_608 的帖子
计算的误差是难免的,和sin(pi)不等于0的道理差不多。想解决这个问题,你稍微搜索下版面就知道了。不要只顾着问,要多动手,多思考。 原帖由 花如月 于 2007-12-11 16:49 发表 http://www.chinavib.com/forum/images/common/back.gif计算的误差是难免的,和sin(pi)不等于0的道理差不多。想解决这个问题,你稍微搜索下版面就知道了。不要只顾着问,要多动手,多思考。
:@Q
我知道有误差但是
:@Q 要是矩阵本来就有2个很相近,很相近的特征值,怎么办?? 原帖由 abiu_608 于 2007-12-11 16:57 发表 http://www.chinavib.com/forum/images/common/back.gif
:@Q
我知道有误差但是
:@Q 要是矩阵本来就有2个很相近,很相近的特征值,怎么办??
两个数如果相差很小,就认为是同一个数,用这个观点编写你的程序 原帖由 eight 于 2007-12-11 17:06 发表 http://www.chinavib.com/forum/images/common/back.gif
两个数如果相差很小,就认为是同一个数,用这个观点编写你的程序
谢谢啦
牢记在心:lol :lol
[ 本帖最后由 花如月 于 2007-12-11 17:29 编辑 ]
回复 #11 abiu_608 的帖子
对于简单的矩阵,用符号运算可以精确判断 一个比较笨的方法,再做一层条件判断,比较两数之差与一个极小值(自定义)大小,就认为大于不等,小于等。其实C中对于float型相等不也是这么做的吗
页:
[1]