Почему Matlab не видит мою функцию? - PullRequest
1 голос
/ 31 августа 2011

Моя функция определенно работает;он был протестирован и в какой-то момент был распознан.

Вот прототип функции:

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')

, чтобы убедиться.Это просто не работает, и я сбит с толку.

Любая помощь приветствуется.

Ответы [ 4 ]

5 голосов
/ 31 августа 2011

Для суммирования других сообщений приведен рабочий процесс определения причины проблемы.

  1. Вы неправильно набрали название функции. Проверьте определение функции и убедитесь, что оно действительно называется calculateEllipse.

  2. Вы сохранили функцию в файле с именем, отличным от имени функции. Проверьте имя файла функции и убедитесь, что оно совпадает с именем функции.

  3. Папка, содержащая имя функции, не находится в пути MATLAB. Есть несколько способов проверить это. Введите path, чтобы увидеть текущий путь, или which calculateEllipse, чтобы найти местоположение, которое MATLAB использует для этого файла. (Если есть проблема, последняя команда отобразит 'calculateEllipse' not found.. Обратите внимание, что addpath не обновляет путь окончательно, поэтому при закрытии MATLAB путь будет сброшен. Используйте для этого savepath.

  4. Папка, содержащая функцию, является подкаталогом matlabroot. Эти папки зарезервированы для полноценных наборов инструментов; плохие вещи случаются, когда вы храните свой код здесь. См. Ответ Боба для получения дополнительной информации.

Другие полезные вещи для проверки:

  1. Можете ли вы вызывать другие функции, хранящиеся в той же папке?

  2. Если вы сохраните функцию в другой папке, она будет работать тогда?

2 голосов
/ 31 августа 2011

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

См. http://www.mathworks.com/help/techdoc/matlab_env/f8-28521.html,или перейдите на веб-сайт MathWorks и найдите

path cache

для получения дополнительной информации.

1 голос
/ 18 декабря 2013

Ключ к этой проблеме заключается в следующем: %Has no license available.Это означает, что функция в каталоге функции, которую вы пытаетесь использовать, имеет то же имя, что и функция в наборе инструментов, которым вы не владеете.MATLAB по умолчанию отключает весь каталог, а не только функцию с тем же именем в наборе инструментов, которым вы не владеете.Вот пример:

файлов в каталоге:

myfunction.m
scoobydoo.m
blackman.m

Если мне не принадлежит «Панель инструментов обработки сигналов», тогда blackman.m отключит всекаталог.

1 голос
/ 31 августа 2011

Я могу вспомнить пару причин, по которым это может произойти.

Во-первых, как сказал Джефф, вы могли бы назвать файл «calcEllipse.m» вместо «calcEllipse.m». В этом случае вам нужно переименовать функцию, чтобы она была такой же, как и у сохраненного вами файла.

Во-вторых, вы не добавили правильный путь. В противном случае нет никаких причин, по которым я могу ошибиться. Дважды проверьте, что вы добавили путь к сохраняемому файлу m. Простой способ проверить, если вы наберете «Calculate», а затем нажмете «Tab», работает ли автозаполнение? Если нет, то вы не в пути.

Надеюсь, это одна из тех вещей, которую вы можете быстро исправить!

...