为什么在此 MATLAB 代码中出现“未定义的函数或变量<变量名称>”错误?

Why do I get an "Undefined function or variable <variable name>" error in this MATLAB code?

提问人:user414981 提问时间:8/11/2010 最后编辑:user414981 更新时间:3/31/2013 访问量:4048

问:

load X_Q2.data
load T_Q2.data
x = X_Q2(:,1);
y = X_Q2(:,2);

learningrate = 0.2;
max_iteration = 50;

% initialize parameters
count = length(x);
weights = rand(1,3); % creates a 1-by-3 array with random weights
globalerror = 0;
iter = 0;
while globalerror ~= 0 && iter <= max_iteration
  iter = iter + 1;
  globalerror = 0;
  for p = 1:count
    output = calculateOutput(weights,x(p),y(p));
    localerror = T_Q2(p) - output
    weights(1)= weights(1) + learningrate *localerror*x(p);
    weights(2)= weights(1) + learningrate *localerror*y(p);
    weights(3)= weights(1) + learningrate *localerror;
    globalerror = globalerror + (localerror*localerror);
  end 
end  

我在其他文件中删除了这个 fuunc。

function result = calculateOutput (weights, x, y)
s = x * weights(1) + y * weights(2) + weights(3);
if s >= 0
    result = 1;
else
    result = -1;
end

什么都没有出来。我在命令窗口中取出代码,然后按回车键。窗户上什么都没有。如何获得输出?

MATLAB 未定义

评论

0赞 MatlabDoug 8/11/2010
作为一个社区,如果将代码编辑为:while x ~= 0 x = 10,这个问题会更好吗?x = x - func(x) end 对于未来的读者来说,它更简洁,并且具有相同的概念。
0赞 gnovice 8/11/2010
@MatlabDoug:这将帮助未来的读者,他们可能遇到与OP提出的类似问题,但实际上还有其他一些特定于此代码的问题,OP尚未意识到这些问题。我想说的是,它应该保持原样,以帮助该特定用户解决这些额外的错误。标题编辑(也许还有一些标签编辑)应该有助于概括问题。
0赞 gnovice 8/11/2010
@ishamahajan:更新后的代码的一个问题是,由于初始化为 0,因此从未输入 while 循环。您必须将其初始化为非零值。但是,这是您最不关心的问题。您似乎甚至很难理解所涉及的算法,更不用说如何将它们从另一种语言翻译成 MATLAB。我认为您需要花一些时间来学习 MATLAB 的基础知识,从在线文档开始,这非常好。globalerror

答:

4赞 gnovice 8/11/2010 #1

您不能在 while 循环的条件检查中使用该变量,因为在循环之前,您不会将该变量定义为任何内容。这就是为什么您收到错误“未定义的函数或变量'globalerror'”的原因。在尝试在任何语句中使用它之前,必须初始化为某个值。globalerrorglobalerror

另外,正如我在回答您之前的问题时提到的,您不能在脚本中声明函数。尝试从上面的脚本中剪切出函数,并将其放在名为 的文件中,然后将其保存在 MATLAB 路径的某个位置。calculateOutputcalculateOutput.m

我还看到了一些其他问题:

  • MATLAB 使用从 1 开始的索引,而不是从 0 开始的索引。换句话说,向量或矩阵维度的第一个元素按值 1 而不是 0 进行索引。
  • 我不知道你想用这条线做什么:

    localerror = output(p) - output
    

    因为变量是代码中的标量,而不是可以按 索引的向量outputp

评论

0赞 user414981 8/11/2010
因为我有两个数据文件,一个用于输入,一个用于输出。我宁愿写T_Q2[p]......你说什么?
0赞 user414981 8/11/2010
您可以在我的另一个问题中检查这 2 个文件的格式......stackoverflow.com/questions/3445484/......