Решите ошибку: неопределенная функция или переменная

Проблема

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

Undefined function or variable 'x'.

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

Возможные решения

Проверьте орфографию имени функции или переменной

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

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

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

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

Проверьте, что входные параметры соответствуют синтаксису функции

Методы объекта обычно вызываются с использованием синтаксиса функции: для образца method(object,inputs). Также их можно вызвать с помощью записи через точку: например object.method(inputs). Одна из распространенных ошибок - смешать эти синтаксисы. Например, можно вызвать метод, используя синтаксис функции, но чтобы предоставить входы, следующие за синтаксисом записи через точку, и исключить объект как вход: например, method(inputs). Чтобы избежать этого, при вызове метода объекта убедитесь, что вы сначала задаете объект, либо через первый вход синтаксиса функции, либо через первый идентификатор записи через точку.

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

Когда вы пишете функцию, вы устанавливаете ее имя, когда вы пишете ее линию определения функции. Это имя должно всегда совпадать с именем файла, в котором она сохранена. Для примера, если вы создаете функцию с именем 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. В разделе Find files containing text введите имя функции.

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

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

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

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

Как только вы знаете, к какому тулбоксу принадлежит функция, используйте ver чтобы увидеть, какие тулбоксы установлены в системе, из которой вы запускаете MATLAB. ver функция отображает список всех установленных в данный момент MathWorks® товары. Если вы можете найти тулбокс, который вам нужен в выходе, отображаемом ver, затем устанавливается тулбокс. Если вы не можете, необходимо установить его в порядок, чтобы использовать. Если вы не можете, необходимо установить его в порядок, чтобы использовать. Для получения справки по установке продуктов MathWorks см. раздел Установка и лицензирование.

Проверьте путь, используемый для доступа к Function Toolbox

Совет

Если у вас есть пользовательский путь к файлу, этот шаг удалит его.

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

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

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

  1. На вкладке Home, в разделе Environment, нажмите Preferences.

    Откроется диалоговое окно Выбор (Preference).

  2. На странице MATLAB > General выберите Update Toolbox Path Cache.

  3. На вкладке Home, в разделе Environment, выберите Set Path.

    Откроется диалоговое окно Задать путь (Set Path).

  4. Выберите Default.

    Откроется небольшое диалоговое окно, предупреждающее о потере текущих настроек пути. Выберите Yes, если вы решите продолжить.

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

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

which -all <functionname>

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

Подтвердите, что лицензия активна

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