Как преобразовать операторы try-catch в октаву в форму Matlab?

Мне нужно преобразовать старый код Octave в форму Matlab R2017a. Matlab не понимает упомянутый код и выдает ошибку:

Неопределенная переменная «lasterror» или класс «lasterror.message».

Ошибка в calculateCentroids (строка 16) msg ​​= lasterror.message;

Mathworks сообщает, что «lasterror» будет или уже был удален из более современных версий Matlab. Лично я не знаком ни с lasterror.message, ни с парой try-catch. Надеюсь, вы мне поможете.

код:

function centroids = computeCentroids(Xnum, Xcat, idx, K) 
[m n] = size([Xcat Xnum]);
centroids = zeros(K, n);
for i=1:K,
    indx = (idx(:,1)== i);
    try
        centroids(i,:) = [findMode(Xcat, indx) computeMean(Xnum, indx)];
    catch
        msg = lasterror.message;
        fprintf(strcat(msg, '\n'));
    end_try_catch
    end
end
.
.
.
.
end

person Star Walker    schedule 01.05.2018    source источник
comment
Пробовали ли вы читать документацию? Перехватите само исключение, не полагайтесь на lasterror   -  person excaza    schedule 01.05.2018
comment
Если по какой-либо причине вы хотите использовать lasterror, вам нужно сохранить структуру, возвращенную lasterror, прежде чем пытаться получить доступ к ее полю message. В отличие от Octave, MATLAB не позволяет индексировать результат функции без предварительного присвоения его промежуточной переменной.   -  person excaza    schedule 01.05.2018


Ответы (1)


Ознакомьтесь с документацией. Вы можете распечатать ошибку следующим образом:

try
   %Error-maker
catch e 
    fprintf(1,'There was an error! The message was:\n%s',e.message);
end
person cemsazara    schedule 01.05.2018