Вопрос:
Моя функция определенно работает; она была проверена и в какой-то момент была признана.
Здесь прототип функции:
function [X Y] = calculateEllipse(x, y, a, b, angle) %# Code here end
Здесь звонок, который я делаю с терминала Matlab:
calculateEllipse (612, 391, 107, 60, 331)
Здесь ошибка выскакивает у меня:
??? Undefined function or method ‘calculateEllipse’ for input arguments of type ‘double’.
Теперь я на 100% уверен, что я в том же каталоге, что и функция. Я даже использовал
addpath(‘C:path-to-function’)
Чтобы убедиться. Он просто не работает, и я озадачен.
Любая помощь приветствуется.
Ответ №1
Чтобы обобщить другие сообщения, здесь приведен рабочий процесс для определения причины проблемы.
-
Вы ошибочно указали название функции. Проверьте определение функции и убедитесь, что она действительно называется calculateEllipse.
-
Вы сохранили функцию в файле с именем, отличным от имени функции. Проверьте имя файла и убедитесь, что оно совпадает с именем функции.
-
Папка, содержащая имя функции, не находится на пути MATLAB. Есть несколько способов проверить это. Введите path чтобы увидеть текущий путь или which calculateEllipse чтобы найти местоположение, которое MATLAB использует для этого файла. (Если есть проблема, эта последняя команда отобразит ‘calculateEllipse’ not found. Обратите внимание, что addpath не постоянно обновляет путь, поэтому, когда вы закрываете MATLAB, путь будет сброшен. Используйте для этого путь savepath.
-
Папка, содержащая эту функцию, является подкаталогом matlabroot. Эти папки зарезервированы для полноценных панелей инструментов; плохие вещи происходят, когда вы храните свой код здесь. См. Ответ Боба для получения дополнительной информации.
Другие полезные вещи для проверки:
-
Можете ли вы вызвать другие функции, которые хранятся в одной папке?
-
Если вы сохраните функцию в другой папке, она будет запущена?
Ответ №2
Добавление к тому, что сказал Джефф; Другая возможность заключается в том, что вы разместили функцию где-то внутри вашей установки MATLAB. По умолчанию MATLAB не пересматривает свою собственную файловую структуру для новых файлов; он предполагает, что его внутренняя файловая структура остается неизменной. Убедитесь, что вы сохраняете файл (который, как указал Джефф, должен называться calculateEllipse.m) где-то вне вашей установки MATLAB.
См. или перейдите на веб-сайт MathWorks и выполните поиск
path cache
Чтобы получить больше информации.
Ответ №3
Я могу придумать пару причин, которые могут произойти.
Во-первых, как сказал Джефф, вы могли бы назвать файл “calcEllipse.m” вместо “calculateEllipse.m”. В этом случае вам нужно переименовать функцию так же, как и файл m, который вы сохранили.
Во-вторых, вы не добавили правильный путь. Нет никаких оснований для того, чтобы в противном случае я мог сообщить об этом другим. Дважды проверьте, что вы добавили путь к m файлу, который сохраняется. Простой способ проверить, если вы наберете “calculateEll”, а затем нажмите вкладку, работает ли автозаполнение? Если нет, вы находитесь вне пути.
Надеюсь, это одна из тех вещей, которые вы можете быстро исправить!
Ответ №4
Ключом к этой проблеме является следующее: %Has no license available. Это означает, что функция в каталоге функции, которую вы пытаетесь использовать, имеет то же имя, что и функция в панели инструментов, которой вы не владеете. MATLAB по умолчанию отключает весь каталог, а не только функцию с тем же именем в панели инструментов, которой у вас нет. Вот пример:
файлы в каталоге:
myfunction.m scoobydoo.m blackman.m
Если я не владею “Инструментом обработки сигналов”, тогда blackman.m отключит весь каталог.