Подтвердить что ты не робот

Ошибка 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'.

Что такое сообщение об ошибке, которое мне нужно делать, я не вижу ошибки в коде или вызове функции?

4b9b3361

Ответ 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. Пожалуйста, проверьте и решите проблему с лицензией, тогда она будет работать нормально.