声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1417|回复: 9

[编程技巧] cdf2rdf函数问题

[复制链接]
发表于 2010-7-13 20:35 | 显示全部楼层 |阅读模式

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

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

x
我在编程过程中有这样一个语句

[evects,evalue]=eig(jacoA);
[evects,evalue]=cdf2rdf(evects,evalue);


运行后老是提示错误,但我看不出原因,哪位高手给看看,不胜感激
错误提示如下,我的程序名是qiujie

??? Function 'find' is not defined for values of class 'sym'.
Error in ==> find at 39
  [varargout{1:nargout}] = builtin('find', varargin{:});

Error in ==> cdf2rdf at 19
i = find(imag(diag(d))');

Error in ==> qiujie at 69
[evects,evalue]=cdf2rdf(evects,evalue)
回复
分享到:

使用道具 举报

发表于 2010-7-13 23:46 | 显示全部楼层

回复 楼主 kangarooli 的帖子

个人水平专业有限, 无法从你的帖子中得到你的问题的完整信息, 不能确定判断出错原因:loveliness:
find里头的d是否为sym?
 楼主| 发表于 2010-7-14 08:33 | 显示全部楼层

回复 沙发 ChaChing 的帖子

前两个错误提示不是我程序里的,只有第三个才是我程序里的语句,应该说的是cdf2rdf的源程序吧,我就是这不明白,d应该就是指所求的的特征值
发表于 2010-7-14 09:20 | 显示全部楼层
呵呵,MATLAB的错误提示机制是由内到外逐步提示,先提示直接发生错误的地方,然后顺藤摸瓜提示外层哪个函数调用引起的这个错误,然后这样一层层外推,从LZ给的错误信息来看,LZ程序qiujie第69行[evects,evalue]=cdf2rdf(evects,evalue)引发了错误,cdf2rdf第19行调用了find,而find不支持符号类型的查找。
综上分析得出的结论:qiujie里面定义了一些符号变量,evects或evalue是符号型的,请改成数值型。

评分

1

查看全部评分

 楼主| 发表于 2010-7-14 20:31 | 显示全部楼层

回复 地板 rocwoods 的帖子

谢谢,看了你的回答很受益,但是我求出的特征值和特征向量都是数值的啊!如下
evects =

[   -.2003-1.566*i,   -.2003+1.566*i,            .2180,                    .7613]
[    .6427+1.521*i,    .6427-1.521*i,           -2.109,                     .7772]
[ .2589+.8416e-1*i, .2589-.8416e-1*i,        -.2140e-2,           -.2919]
[    1.849+3.373*i,    1.849-3.373*i,           -6.379,                     .4653]
evalue =

[            -2.815,                0.,                                0.,                                      0.]
[                0.,      -.9570e-5+.7971*i,                0.,                                       0.]
[                0.,                     0.,                          -9.185,                                   0.]
[                0.,                     0.,                               0.,          -.9570e-5-.7971*i]
cdf2rdf就是使复数特征值以实数块的形式显示,我发现特征值如下显示的话就没问题,可以运行,下面是我自己输的,这是怎么回事呢
evalue =

[         0+.7971*i,                        0.,                              0.,                     0.]
[                0.,                        0-.7971*i,                        0.,                     0.]
[                0.,                                0.,                       -2.815,                   0.]
[                0.,                                0.,                             0.,             -9.185]
发表于 2010-7-14 21:10 | 显示全部楼层
...evects =

[   -.2003-1.566*i,   -.2003+1.566*i,            .2180,                    .7613]
[    .6427+1.521*i,    .6427-1.521*i,           -2.109,                     .7772]
[ .2589+.8416e-1*i, .2589-.8416e-1*i,        -.2140e-2,           -.2919]
[    1.849+3.373*i,    1.849-3.373*i,           -6.379,                     .4653]
...

如此显示就是sym
试比较两者差异
syms x; aa=[1,2;3,4], bb=[1,2;x,3]
 楼主| 发表于 2010-7-14 21:45 | 显示全部楼层

回复 6楼 ChaChing 的帖子

你说的例子我能明白,但我的那个里面没有系统量!都是数值啊!
那个e也是系统十进制显示,怎么会是sym呢,请指点
发表于 2010-7-15 00:51 | 显示全部楼层

回复 7楼 kangarooli 的帖子

用isnumeric检查下吧!
 楼主| 发表于 2010-7-15 08:53 | 显示全部楼层

回复 8楼 ChaChing 的帖子

奇怪,返回值怎么会是假呢,不解,都是数怎么还返回零呢,真诚的感谢各位,很长知识,谢谢
发表于 2010-7-15 11:28 | 显示全部楼层

回复 9楼 kangarooli 的帖子

不是请楼主详细比较下, 两者输出型式的差异!:loveliness:
syms x; aa=[1,2;3,4], bb=[1,2;x,4]; bb(2,1)=3
注意下, 那些[]符号
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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