Matlab中的“未定义的函数或变量”

时间:2013-03-09 06:29:53

标签: matlab

这是我的代码:

    function [im,sindx,end1]=alln(im,i,j,secret,sindx,end1)
    slen=length(secret);
    p=im(i,j);
    neigh= [im(i-1,j) im(i+1,j) im(i,j-1) im(i,j+1) im(i-1,j-1) im(i+1,j-1) im(i-1,j+1) im(i+1,j+1)];
    minpix = min (neigh)
    maxpix = max (neigh)

        if minpix < p < maxpix
        lowlim = minpix+1;
        highlim = maxpix-1;   
        range = highlim-lowlim+1;

        nbits=floor(log2(abs(range)));   

        if sindx+nbits-1>slen
            end1=1;
            return
        end
        for k=1:nbits
            bin(k)=secret(sindx+k-1);
        end
        b = bin2dec(bin);
        newvalue1 = abs (minpix + b);
        newvalue2 = abs (maxpix - b);
        if abs(p-newvalue1)<= abs(p-newvalue2)
            im(i,j) = newvalue1;
        else
            im(i,j) = newvalue2;
        end

        sindx=sindx+nbits;

    end
end

我的主程序调用此函数。当我运行该程序时,我收到以下错误消息:

??? Undefined function or variable "bin".

Error in ==> alln at 34
            b = bin2dec(bin);

我知道有很多专家对他们来说根本不是问题。我是MATLAB的新手。请大家指点一下,代码中哪种类型的修改可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

首先,文件中是否缺少一些行?也许你从顶部删除了一些评论?因为错误消息说明了

b = bin2dec(bin); 

是第34行,但它是你出现的代码中的第22行。

好的,那边......

错误消息显示'bin'未定义,但我看到它正在线上设置......

bin(k)=secret(sindx+k-1); 

这告诉我,这条线没有运行。

我看到bin = ...行在'for'循环中,所以我怀疑for循环运行了零次,这意味着'bin'永远不会被定义。什么是nbits?是1还是不到1?这会阻止循环运行。

尝试从

的末尾删除分号
nbits=floor(log2(abs(range))); 

再次排队并运行您的代码。

不使用分号将强制在命令窗口中打印nbits的值。我打赌你会发现它是1或更少。如果是这样的话,那么开始看看如何计算nbits nbits,我打赌你会发现问题。

答案 1 :(得分:0)

函数alln的输入参数是,您收到错误了吗?

假设nbits为0,则以下循环不会运行:

for k=1:nbits
    bin(k)=secret(sindx+k-1);
end

因此,bin将是未定义的。所以,错误发生了。这是可能发生错误的情况之一。有很多这样的可能案例。