2011-05-02 91 views
0
a1=[1 2 3]; 
a2=[1 2 3]; 
i=2; 
//below, I'm trying to check if size(a1,2) ~= size(a2,2) 
if size(a1,2) ~= size(eval(['a' num2str(i)]),2), 
disp('columns not equal'); 
else 
disp('columns equal'); 
end 

上面的代码显示“不等于列”,当柱相等。我究竟做错了什么?的eval()不工作的矩阵名称

+0

适合我。 – gnovice 2011-05-02 04:22:04

+0

奇怪......我将上面的代码复制粘贴到Matlab命令行上,当它应该打印出“列相等”时,它仍然会打印“列不相等”。这里有些不对劲。请帮忙。 – Nav 2011-05-02 04:58:49

+0

你使用什么版本的Matlab?如果将其更改为'eval(['size(a'num2str(i)',2)'])',会发生什么? – 2011-05-02 06:44:26

回答

0

当我在MATLAB R2010b中运行你的代码时,我得到了正确的结果。这里有一些事情你应该检查:

  • 尝试INT2STR而不是NUM2STR(我猜这是问题的根源,但检查只是要确定)。

  • 发出clear all命令清除主工作区,然后再次尝试运行您的代码。这将排除使用局部变量隐藏功能evalsizenum2str的可能性。

  • 检查,看看如果你使用WHICH命令阴影evalsize,或num2str与用户定义的函数。例如,这将显示所有的eval重载版本当前存在:

    which eval -all 
    
  • 如果您仍然有问题,找出哪些MATLAB version您正在使用,看看bug报告涉及EVAL功能已存在this MathWorks support page注意:您需要MathWorks帐户登录才能访问错误报告)。

+0

Err ...它现在正在工作。我认为这个问题确实是存在一些比我定义的大的a1或a2数组。如果是这样,我很惊讶我定义的新阵列没有覆盖旧阵列。无论如何,我已经关闭matlab并再次打开,问题不再发生。然后再次,它不可能是a1和a2阵列的问题。 eval不适用于很多其他阵列。无论如何,这一切都奇迹般地工作。谢谢。 – Nav 2011-05-05 06:04:00