kangarooli 发表于 2010-7-13 20:35

cdf2rdf函数问题

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

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

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

??? Function 'find' is not defined for values of class 'sym'.
Error in ==> find at 39
= builtin('find', varargin{:});
Error in ==> cdf2rdf at 19
i = find(imag(diag(d))');
Error in ==> qiujie at 69
=cdf2rdf(evects,evalue)

ChaChing 发表于 2010-7-13 23:46

回复 楼主 kangarooli 的帖子

个人水平专业有限, 无法从你的帖子中得到你的问题的完整信息, 不能确定判断出错原因:loveliness:
find里头的d是否为sym?

kangarooli 发表于 2010-7-14 08:33

回复 沙发 ChaChing 的帖子

前两个错误提示不是我程序里的,只有第三个才是我程序里的语句,应该说的是cdf2rdf的源程序吧,我就是这不明白,d应该就是指所求的的特征值

rocwoods 发表于 2010-7-14 09:20

呵呵,MATLAB的错误提示机制是由内到外逐步提示,先提示直接发生错误的地方,然后顺藤摸瓜提示外层哪个函数调用引起的这个错误,然后这样一层层外推,从LZ给的错误信息来看,LZ程序qiujie第69行=cdf2rdf(evects,evalue)引发了错误,cdf2rdf第19行调用了find,而find不支持符号类型的查找。
综上分析得出的结论:qiujie里面定义了一些符号变量,evects或evalue是符号型的,请改成数值型。

kangarooli 发表于 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]

ChaChing 发表于 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=, bb=

kangarooli 发表于 2010-7-14 21:45

回复 6楼 ChaChing 的帖子

你说的例子我能明白,但我的那个里面没有系统量!都是数值啊!
那个e也是系统十进制显示,怎么会是sym呢,请指点

ChaChing 发表于 2010-7-15 00:51

回复 7楼 kangarooli 的帖子

用isnumeric检查下吧!

kangarooli 发表于 2010-7-15 08:53

回复 8楼 ChaChing 的帖子

奇怪,返回值怎么会是假呢,不解,都是数怎么还返回零呢,真诚的感谢各位,很长知识,谢谢

ChaChing 发表于 2010-7-15 11:28

回复 9楼 kangarooli 的帖子

不是请楼主详细比较下, 两者输出型式的差异!:loveliness:
syms x; aa=, bb=; bb(2,1)=3
注意下, 那些[]符号
页: [1]
查看完整版本: cdf2rdf函数问题