Распространенные ошибки при вызове функций

Конфликтующие имена функций и переменных

MATLAB® выдает ошибку, если переменной и функции дали то же имя и существует недостаточная информация, доступная для MATLAB, чтобы разрешить конфликт. Можно видеть сообщение об ошибке наподобие:

Error: <functionName> was previously used as a variable,
  conflicting with its use here as the name of a function 
  or command.

где <functionName> является именем функции.

Определенное использование eval и функций load может также привести к подобному конфликту между именами переменных и именами функций. Для получения дополнительной информации см.:

Неопределенные функции или переменные

Можно столкнуться со следующим сообщением об ошибке или чем-то подобным, при работе с функциями или переменными в MATLAB:

Undefined function or variable 'x'.

Эти ошибки обычно указывают, что MATLAB не может найти конкретную переменную или файл программы MATLAB в текущем каталоге или на пути поиска файлов. Первопричиной, вероятно, будет одно из следующего:

  • Имя функции было написано c ошибкой.

  • Имя функции отличается от имени файла, в котором она сохранена.

  • Тулбокс, которому принадлежит функция, не установлен.

  • Путь к функции был изменен.

  • Функция является частью тулбокса, на который у вас нет лицензии.

Выполните шаги, описанные в этом разделе, чтобы разрешить эту ситуацию.

Проверка написания имени функции

Одна из наиболее распространенных ошибок - опечатки в названии функции. Особенно с длинными именами функций или именами, содержащими похожие символы (например, обозначьте буквами l и цифру "один"), легко совершить ошибку, которая легко не обнаруживается.

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

accumArray
Undefined function or variable 'accumArray'.
 
Did you mean:
>> accumarray

Нажмите Enter, чтобы выполнить предложенную команду или Esc, чтобы отклонить его.

Убедитесь, что имя функции совпадает с именем файла

Имя функции задается при ее определении. Это имя должно всегда совпадать с именем файла, в котором она сохранена. Например, если вы создаете функцию с именем curveplot,

function curveplot(xVal, yVal)
     - program code -

затем необходимо назвать файл, содержащий эту функцию curveplot.m. Если вы создаете файл pcode для функции, то называете тот файл curveplot.p. В случае конфликтной функции и имен файлов, имя файла заменяет имя, данное функции. В этом примере, если вы сохраняете функцию curveplot в файл с именем curveplotfunction.m, то попытка обратиться к функции по имени будет неудачной:

curveplot
Undefined function or variable 'curveplot'.

Если вы столкнулись с этой проблемой, измените имя функции либо файла так, чтобы они совпали. Если вы испытываете затруднения при определении местоположения файла, который использует эту функцию, используйте утилиту Find Files MATLAB можно следующим образом:

  1. На вкладке Home, в разделе File, нажимают Find Files.

  2. В поле Find files named: введите *.m

  3. Under Find files containing text: вводит имя функции.

  4. Нажмите кнопку Find

Убедитесь, что тулбокс установлен

Если вы не можете использовать встроенную функцию из MATLAB или его тулбоксов, убедитесь, что функция установлена.

Если вы не знаете, какой тулбокс поддерживает необходимую функцию, обратитесь к поиску по функциям в https://www.mathworks.com/help. Имя тулбокса появляется наверху страницы ссылки на функцию.

Если вы знаете, какому тулбоксу функция принадлежит, используйте функцию ver, чтобы видеть, какие тулбоксы установлены в системе, от которой вы запускаете MATLAB. Функция ver отображает список всех в настоящее время установленных продуктов MathWorks®. Если можно определить местоположение тулбокса, вам нужно в выводе, отображенном ver, то тулбокс установлен. Для справки с установкой Продуктов Mathworks см. документацию Инструкции по установке.

Если вы не видите тулбокс, и вы полагаете, что он установлен, то, возможно, путь MATLAB был установлен неправильно. Переходите к следующему разделу.

Проверьте путь к функции

Этот шаг сбрасывает путь к значению по умолчанию.

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

  1. На вкладке «Главная страница (Home)» в разделе «Конфигурация (Environment)» нажмите «Настройки (Preferences)».

    Диалоговое окно Preference появляется.

  2. Под MATLAB> узел General, нажмите кнопку Update Toolbox Path Cache.

  3. На вкладке Home, в разделе Environment, нажимают Set Path....

    Диалоговое окно Set Path открывается.

  4. Нажмите Default.

    Маленькое диалоговое окно открывает предупреждение, что вы потеряете свои текущие настройки пути, если вы продолжите. Нажмите Yes, если вы решаете продолжить.

(Если вы добавили какие-либо пользовательские пути к MATLAB, необходимо будет восстановить тех позже),

Еще раз выполните команду ver, чтобы увидеть, установлен ли тулбокс. В противном случае вы, возможно, должны переустановить этот тулбокс, чтобы использовать эту функцию. См. Связанное Решение 1-1CBD3 , "Как установить дополнительные панели инструментов в существующую MATLAB" для получения дополнительной информации об установке инструментария.

Если ver показывает ваш тулбокс, запустите следующую команду, чтобы видеть, можно ли найти функцию:

which -all <functionname>

заменяя <functionname> на имя функции. Вы увидите путь к файлу с функцией. Если вы получаете сообщение, указывающее, что имя функции не было найдено, вы, возможно, должны переустановить тот тулбокс, чтобы сделать функцию активной.