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

时间:2010-08-10 19:21:15

标签: matlab undefined

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  

我在其他文件中输出了这个函数。

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

什么都没有出来。我在命令窗口中输出代码并按下输入....窗口上没有任何选择。我如何获得输出?

1 个答案:

答案 0 :(得分:4)

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

另外,正如我在my answer to your previous question中提到的,你不能在脚本中声明函数。尝试从上面的脚本中删除函数calculateOutput并将其放在名为calculateOutput.m的文件中,然后将其保存在MATLAB path上的某个位置。

我看到了一些其他问题:

  • MATLAB使用基于1的索引,而不是基于0的索引。换句话说,向量的第一个元素或矩阵维度由值1索引,而不是0。
  • 我不知道你要用这​​条线做什么:

    localerror = output(p) - output
    

    因为变量output是代码中的标量,而不是可由p索引的向量