Ошибка MATLAB: Undefined функция или метод X для входных аргументов типа 'double'
Я новый пользователь Matlab, не могли бы вы помочь:
У меня есть следующий код в файле .M:
function f = divrat(w, C)
S=sqrt(diag(diag(C)));
s=diag(S);
f=sqrt(w'*C*w)/(w'*s);
Я сохранил этот файл (divrat.M) в обычном пути Matlab, и поэтому я предполагаю, что Matlab будет читать функцию при ее запуске и что эта функция должна быть доступна для использования.
Однако, когда я печатаю
>> divrat(w, C)
Я получаю следующую ошибку
??? Undefined функция или метод 'divrat' для входных аргументов типа 'double'.
Что такое сообщение об ошибке, которое мне нужно делать, я не вижу ошибки в коде или вызове функции?
Ответы
Ответ 1
Вы получаете эту ошибку, когда функция не находится на пути MATLAB или в pwd.
Сначала убедитесь, что вы можете найти функцию, используя:
>> which divrat
c:\work\divrat\divrat.m
Если он возвращает:
>> which divrat
'divrat' not found.
Это не на пути MATLAB или в PWD.
Во-вторых, убедитесь, что каталог, содержащий divrat
, находится на пути MATLAB с помощью команды PATH
. Возможно, каталог, который, по вашему мнению, находился на пути, фактически не находится на пути.
Наконец, убедитесь, что вы не используете каталог "private". Если divrat
находится в каталоге с именем private, он будет доступен с помощью функций в родительском каталоге, но не из командной строки MATLAB:
>> foo
ans =
1
>> divrat(1,1)
??? Undefined function or method 'divrat' for input arguments of type 'double'.
>> which -all divrat
c:\work\divrat\private\divrat.m % Private to divrat
Ответ 2
Как указывали другие, это, вероятно, проблема с тем, что путь к файлу функции не находится в пути Matlab '.
Один простой способ проверить это - открыть функцию в редакторе и нажать клавишу F5. Это заставит Редактор попытаться запустить файл, и в случае, если файл не находится в пути, он предложит вам окно с сообщением. Выберите Add to Path
в этом, и вы должны быть в порядке.
Односторонняя заметка: в конце вышеописанного процесса в окне команд Matlab появится ошибка, в которой отсутствуют аргументы: очевидно, мы не приводили никаких аргументов, когда пытались запустить из редактора. Но теперь вы можете использовать функцию из командной строки, указав правильные аргументы.
Ответ 3
Наиболее распространенной причиной этой проблемы является то, что Matlab не может найти файл на пути поиска. В основном, Matlab ищет файлы в:
- Текущий каталог (
pwd
);
- Непосредственно в каталоге на пути (чтобы увидеть путь, введите
path
в командной строке)
- В каталоге с именем
@(whatever the class of the first argument is)
, который находится в любом каталоге выше.
Как и кто-то другой, вы можете использовать команду which
, но это часто бесполезно в этом случае - это говорит вам, что Matlab не может найти файл, который вы уже знали.
Поэтому первое, что нужно сделать, это убедиться, что файл находится на пути к пути.
Следующее, что нужно сделать, это убедиться, что файл, который находит Matlab (использовать), требует того же типа, что и первый аргумент, который вы фактически передаете. I.el, Если w
предполагается быть другим классом, и там есть функция divrat
, но w
фактически пуста, []
, поэтому matlab ищет Double/divrat
, когда есть только a @(yourclass)/divrat.
Это только предположение с моей стороны, но это часто укусывает меня.
Ответ 4
Код ошибки указывает, что определение функции не может быть найдено. Убедитесь, что вы вызываете функцию из той же рабочей области, что и файл divrat.m
. И убедитесь, что функция divrat
не является подфункцией, это должно быть первое объявление функции в файле. Вы также можете попытаться вызвать функцию из одного и того же файла divrat.m
, чтобы узнать, есть ли проблема с выбором рабочей области или функцией.
Кстати, почему вы просто не сказали
s = sqrt(diag(C));
Разве это не будет?
Ответ 5
Кроме того, назовите его divrat.m
, а не divrat.m
. Это не имеет значения для большинства ОС, но кто знает...
Вы также можете проверить, сможет ли Matlab найти функцию, используя команду which
, т.е.
which divrat
Ответ 6
Сама функция является действительным matlab-кодом. Проблема должна быть чем-то другим.
Попробуйте вызвать функцию из расположенного в ней каталога или добавить этот каталог в свой путь поиска с помощью addpath('pathname')
.
Ответ 7
Я уверен, что причина, по которой эта проблема возникла, связана с лицензией набора инструментов (пакета), в который входит эта функция. Напишите which divrat
и посмотрите, каким будет результат. Если он возвращает путь к функции и комментарий Has no license available
, то проблема связана с лицензией. Это означает, что лицензия на пакет установлена неправильно. В основном это происходит, если пакет (панель инструментов) этой функции добавляется позже, то есть после установки оригинала matlab
. Пожалуйста, проверьте и решите проблему с лицензией, тогда она будет работать нормально.