【问题标题】:Why do I get an "Undefined function or variable <variable name>" error in this MATLAB code?为什么在此 MATLAB 代码中出现“未定义函数或变量 <变量名称>”错误?
【发布时间】:2010-08-10 19:21:15
【问题描述】:
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

什么都没有出来。我在命令窗口中输出代码并按回车键......窗口上没有任何内容。如何获得输出?

【问题讨论】:

  • 作为一个社区,如果将代码编辑为以下内容会更好:while x ~= 0 x = 10; x = x - func(x) end 对于以后的读者来说更简洁,概念一致。
  • @MatlabDoug:这将有助于未来读者可能遇到与 OP 提出的问题类似的问题,但实际上还有一些其他特定于此代码的问题,OP 尚未意识到这些问题是问题。我会说它应该保持原样,以帮助这个特定的用户解决这些额外的错误。标题编辑(可能还有一些标签编辑)应该有助于概括问题。
  • @ishamahajan:更新代码的一个问题是,由于您将 globalerror 初始化为 0,因此永远不会进入 while 循环。您必须将其初始化为非零值。但是,这是您遇到的最少的问题。即使理解所涉及的算法,您似乎也遇到了很大的困难,更不用说如何将它们从另一种语言翻译成 MATLAB。我觉得你需要花点时间学习一下MATLAB的基础知识,从online documentation开始,挺好的。

标签: matlab undefined


【解决方案1】:

您不能在 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 索引的向量

【讨论】:

  • 因为我有两个数据文件,一个用于输入,一个用于输出。我宁愿写 T_Q2[p]...你说什么?
  • 您可以在我的另一个问题中检查这两个文件的格式......stackoverflow.com/questions/3445484/…
猜你喜欢
  • 2016-09-25
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2013-09-27
  • 2012-04-15
  • 2013-02-24
相关资源
最近更新 更多