提问人:user414981 提问时间:8/11/2010 最后编辑:user414981 更新时间:3/31/2013 访问量:4048
为什么在此 MATLAB 代码中出现“未定义的函数或变量<变量名称>”错误?
Why do I get an "Undefined function or variable <variable name>" error in this MATLAB code?
问:
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
什么都没有出来。我在命令窗口中取出代码,然后按回车键。窗户上什么都没有。如何获得输出?
答:
4赞
gnovice
8/11/2010
#1
您不能在 while 循环的条件检查中使用该变量,因为在循环中之前,您不会将该变量定义为任何内容。这就是为什么您收到错误“未定义的函数或变量'globalerror'”的原因。在尝试在任何语句中使用它之前,必须初始化为某个值。globalerror
globalerror
另外,正如我在回答您之前的问题时提到的,您不能在脚本中声明函数。尝试从上面的脚本中剪切出函数,并将其放在名为 的文件中,然后将其保存在 MATLAB 路径的某个位置。calculateOutput
calculateOutput.m
我还看到了一些其他问题:
- MATLAB 使用从 1 开始的索引,而不是从 0 开始的索引。换句话说,向量或矩阵维度的第一个元素按值 1 而不是 0 进行索引。
我不知道你想用这条线做什么:
localerror = output(p) - output
因为变量是代码中的标量,而不是可以按 索引的向量。
output
p
评论
0赞
user414981
8/11/2010
因为我有两个数据文件,一个用于输入,一个用于输出。我宁愿写T_Q2[p]......你说什么?
0赞
user414981
8/11/2010
您可以在我的另一个问题中检查这 2 个文件的格式......stackoverflow.com/questions/3445484/......
下一个:理解代码的问题
评论
globalerror