Как я могу сообщить о пользовательских ошибках, когда в вызове функции отсутствуют некоторые аргументы?

Я изучаю основы MATLAB и застрял на том, как создавать ошибки для функций. Вот моя попытка:

function kinetic = KE(m,v)

KE = 0.5*m*v*v

%error messages 
if (isempty(m))
  % mass is empty
  error('No mass given (argument 1)');
elseif (isempty(v))  
  % velocity is empty
  error('No velocity given (argument 2)');
end

fprintf('The kinetic energy is %d joules\n', KE);

Поэтому, если пользователь не указывает 2 переменные, функция выдает ошибку, сообщая пользователю, какую переменную он не указал. Когда я пытаюсь получить это сообщение об ошибке, MATLAB возвращает общее сообщение об ошибке:

 kinetic(,3)
   kinetic(,3)
     |
 Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.

Я не знаю, как это исправить. Я пытался заменить аргументы isempty на arg1 или arg2, но это не имело значения. Затем я попытался скопировать код примера на http://www.mathworks.co.uk/help/matlab/ref/error.html, но это все равно не помогло.

Как вы генерируете определенные ошибки для функций нескольких переменных?

Я знаю, что это довольно простой вопрос, любая помощь будет оценена.


person user78655    schedule 12.10.2014    source источник
comment
kinetic(,3) - это просто недопустимый синтаксис Matlab. Вы не можете написать это.   -  person Oliver Charlesworth    schedule 12.10.2014


Ответы (1)


Есть несколько проблем с вашим кодом:

  1. Синтаксис сигнатуры функции:

    введите здесь описание изображения

    (Квадратные скобки необязательны, если функция имеет только один выход.) Здесь kinetic — это результат вашей функции, тогда как KE — это имя функции; поэтому вызов вашей функции имеет вид

    KE(m,v)
    

    нет

    kinetic(m,v)
    
  2. Функция isempty предназначена только для определения того, является ли массив (а в MATLAB все по умолчанию является двумерным массивом) пуст или нет. Вы не можете использовать его, чтобы определить, отсутствуют ли аргументы в вызове функции.

  3. Как указал Оливер, KE(,v) не является правильным синтаксисом MATLAB, и MATLAB остановится на своем пути и сообщит пользователю о своей ошибке, прежде чем он попытается обработать вызов функции.

Здесь вы, вероятно, захотите определить вариативную функцию, то есть функцию, которая может принимать различное количество аргументов. Используйте для этого varargin и nargin; более подробную информацию см. в справке по MATLAB.

Наконец, вы, вероятно, захотите

  • векторизуйте свою функцию, т. е. сделайте ее совместимой с векторными входными данными, используя операторы входа (.* и .^),
  • предотвратить печать результатов в командном окне, завершая все операторы присваивания точкой с запятой.

function kinetic = KE(varargin)

if nargin == 0
    error('No mass or velocity given')
elseif nargin == 1
    error('No velocity given (argument 2)')
elseif nargin == 2
    m=varargin{1};
    v=varargin{2};
else
    error('Too many inputs')
end

KE = 0.5*m.*v.^2;
fprintf('The kinetic energy is %d joules\n', KE)
person jub0bs    schedule 12.10.2014
comment
Великолепно, это и ответ Оливера все прояснили. Теперь это кажется таким простым! - person user78655; 12.10.2014