Почему в этом коде MATLAB появляется ошибка «Неопределенная функция или переменная <имя переменной>»? - PullRequest
0 голосов
/ 10 августа 2010
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

Ничего не выходит.Я вывожу код в командном окне и нажимаю ввод .... в окне ничего нет.Как я могу получить вывод?

1 Ответ

4 голосов
/ 10 августа 2010

Вы не можете использовать переменную globalerror в проверке состояния вашего цикла while, потому что вы не определяете эту переменную как что-либо до тех пор, пока в пределах цикла. Вот почему вы получаете сообщение об ошибке "Неопределенная функция или переменная 'globalerror'". Вы должны инициализировать globalerror некоторым значением , прежде чем попытаться использовать его в любых операторах.

Кроме того, как я уже упоминал в моем ответе на предыдущий вопрос , вы не можете объявлять функции внутри скриптов. Попробуйте вырезать функцию calculateOutput из приведенного выше сценария и поместите ее в собственный файл с именем calculateOutput.m, затем сохраните ее где-нибудь по пути MATLAB .

И несколько дополнительных проблем, которые я вижу:

  • MATLAB использует индексацию на основе 1, а не индексацию на основе 0. Другими словами, первый элемент векторного или матричного измерения индексируется значением 1, а не 0.
  • Понятия не имею, что вы пытаетесь сделать с этой строкой:

    localerror = output(p) - output
    

    , поскольку переменная output является скаляром в вашем коде, а не вектором , который можно индексировать с помощью p.

...