声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4015|回复: 11

[编程技巧] Matlab中eig命令问题

[复制链接]
发表于 2007-12-11 15:41 | 显示全部楼层 |阅读模式

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

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

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

定义 A=[1 2 2;2 1 2;2 2 1];
       [V,D]=eig(A);


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

????? 盼高手指点...
回复
分享到:

使用道具 举报

发表于 2007-12-11 15:55 | 显示全部楼层
D(1,1)=D(2,2)=-1
答案对的啊

命令 D(1,1)==D(2,2)  这是什么命令?
 楼主| 发表于 2007-12-11 16:10 | 显示全部楼层

回复 #2 sigma665 的帖子

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

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

我想是不是还有小数点后面的数字..
发表于 2007-12-11 16:26 | 显示全部楼层

回复 #3 abiu_608 的帖子

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

ans =

-1.4433e-015

我减了一下,果然有非常小的数
 楼主| 发表于 2007-12-11 16:30 | 显示全部楼层


:@Q  理论上是有重根的

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

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

如果矩阵本来就有2个很相近的特征值,那岂 不是要 混淆了???:@Q
发表于 2007-12-11 16:45 | 显示全部楼层
看误差是e-15级别的,很小了,可以认为是相等的
发表于 2007-12-11 16:49 | 显示全部楼层

回复 #5 abiu_608 的帖子

计算的误差是难免的,和sin(pi)不等于0的道理差不多。想解决这个问题,你稍微搜索下版面就知道了。不要只顾着问,要多动手,多思考。
 楼主| 发表于 2007-12-11 16:57 | 显示全部楼层
原帖由 花如月 于 2007-12-11 16:49 发表
计算的误差是难免的,和sin(pi)不等于0的道理差不多。想解决这个问题,你稍微搜索下版面就知道了。不要只顾着问,要多动手,多思考。


:@Q
    我知道有误差  但是

:@Q 要是矩阵本来就有2个很相近,很相近的特征值,怎么办??
发表于 2007-12-11 17:06 | 显示全部楼层
原帖由 abiu_608 于 2007-12-11 16:57 发表


:@Q
    我知道有误差  但是

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

两个数如果相差很小,就认为是同一个数,用这个观点编写你的程序
 楼主| 发表于 2007-12-11 17:09 | 显示全部楼层
原帖由 eight 于 2007-12-11 17:06 发表

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



谢谢啦

牢记在心:lol :lol

[ 本帖最后由 花如月 于 2007-12-11 17:29 编辑 ]
发表于 2007-12-11 18:09 | 显示全部楼层

回复 #11 abiu_608 的帖子

对于简单的矩阵,用符号运算可以精确判断
发表于 2007-12-12 15:19 | 显示全部楼层
一个比较笨的方法,再做一层条件判断,比较两数之差与一个极小值(自定义)大小,就认为大于不等,小于等。其实C中对于float型相等不也是这么做的吗
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-18 12:31 , Processed in 0.066476 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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