Как заставить matlab видеть функции, определенные в файлах .m? - PullRequest
1 голос
/ 31 марта 2011

Я новичок в MATLAB, но мне нужно написать в нем немного кода.У меня были проблемы с тем, чтобы MATLAB видел функции, которые я определил во внешних файлах .m.Вот что я сделал: я создал файл с именем, скажем, foo.m в моем домашнем каталоге со следующим содержимым:

function [y] = foo(x)
% description
y = x + 1

Когда я запускаю matlab (мой домашний каталог - это рабочий каталог matlab)) он не видит функцию foo - он отвечает стандартным сообщением ??? Undefined function or variable 'foo'.НО help foo или which foo возвращает правильный текст справки по печати данных и указывает на файл foo.m соответственно.

Я должен что-то упустить, но я понятия не имею, что это такое.Это очень раздражает.

О, после нескольких попыток проб и ошибок мне удалось вызвать эту функцию.К сожалению, я не могу вспомнить последовательность шагов, которые я выполнил.Более того, после перезапуска matlab он возвращается к своему обычному ответу «Неопределенная функция или переменная».

У меня работает 7.11.0.584 matlab на linux.

Ответы [ 4 ]

1 голос
/ 31 марта 2011

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

help addpath
help pathtool

Никогда не помещайте эти файлы в официальные каталоги инструментов MATLAB. Выберите совершенно отдельный каталог.

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

1 голос
/ 31 марта 2011

Кажется, у вас проблемы с addpath. Попробуйте открыть файл в редакторе Matlab и добавить точку останова в файл. Если файл не находится в пути Matlab, Matlab должен спросить, хотите ли вы изменить каталог или добавить файл в путь, выберите добавить в путь.

Если это не сработает, попробуйте изменить текущий рабочий каталог (отображается в главном окне) в то же место, что и файл m, и вызвать функцию. Если это не сработает, вы либо ошиблись в названии, либо, возможно, что-то не так с вашей установкой.

Иногда у matlab возникают проблемы, если у него нет разрешения на запись в каталог, в котором находится файл, поэтому проверьте это, то есть убедитесь, что права администратора не требуются для каталога или файла m.

Да, и попробуйте:

clear functions

для перезагрузки всех функций в память.

0 голосов
/ 08 июля 2015

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

Чтобы проверить это, наберите:

which name_of_func.m

и выполучит путь с сообщением «% Нет лицензии».Если это ваша собственная функция, вы не должны получать это сообщение, а только путь.Поэтому найдите в этой папке функцию, которая имеет то же имя, что и функции панели инструментов MATLAB, и переименуйте ее.Я решу проблему:).

С наилучшими пожеланиями Wajahat

0 голосов
/ 31 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...