Ошибка MATLAB: Неопределенная функция или метод 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 function or method 'divrat' for input arguments of type 'double'.

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

Что такое компоненты React? Введение в компоненты | Типы компонентов
Что такое компоненты React? Введение в компоненты | Типы компонентов
Компонент - это независимый, многократно используемый фрагмент кода, который делит пользовательский интерфейс на более мелкие части. Например, если мы...
20
0
187 782
7

Ответы 7

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

Кстати, почему ты просто не сказал

s = sqrt(diag(C));

Разве это не было бы так же?

Также назовите его divrat.m, а не divrat.M. Это не должно иметь значения для большинства ОС, но кто знает ...

Вы также можете проверить, может ли Matlab найти функцию с помощью команды which, т.е.

which divrat

Сама функция - валидный матлаб-код. Проблема должна быть в другом. Попробуйте вызвать функцию из каталога, в котором она находится, или добавьте этот каталог в свой путь поиска с помощью addpath('pathname').

Как указывали другие, это, скорее всего, проблема с тем, что путь к файлу функции не находится в «пути» Matlab.

Один простой способ проверить это - открыть вашу функцию в редакторе и нажать клавишу F5. Это заставит редактор попытаться запустить файл, и, если файл не указан в пути, он предложит вам окно сообщения. Выберите Add to Path в этом, и все будет в порядке.

Одно замечание: в конце вышеупомянутого процесса командное окно Matlab выдаст ошибку, в которой указано, что аргументы отсутствуют: очевидно, мы не предоставили никаких аргументов, когда пытались запустить из редактора. Но с этого момента вы можете использовать функцию из командной строки с правильными аргументами.

Наиболее частой причиной этой проблемы является то, что Matlab не может найти файл по пути поиска. По сути, Matlab ищет файлы в:

  1. Текущий каталог (pwd);
  2. Непосредственно в каталоге по пути (чтобы увидеть путь, введите path в командной строке)
  3. В каталоге с именем @(whatever the class of the first argument is), который находится в любом каталоге выше.

    Как предложил кто-то другой, вы можете использовать команду which, но в данном случае это часто бесполезно - она ​​сообщает вам, что Matlab не может найти файл, о котором вы уже знали.
    Итак, первое, что нужно сделать, это убедиться, что файл доступен по пути.

    Следующее, что нужно сделать, это убедиться, что файл, который Matlab находит (используйте который), требует того же типа, что и первый аргумент, который вы фактически передаете. I.el, если w должен быть другим классом, и там есть функция divrat, но w на самом деле пуст, [], поэтому Matlab ищет Double/divrat, когда есть только @(yourclass)/divrat.. Это просто предположение с моей стороны, но это часто меня кусает.

Вы получаете эту ошибку, когда функция не находится на пути MATLAB или в pwd.

Во-первых, убедитесь, что вы можете найти функцию, используя:

>> which divrat
c:\work\divrat\divrat.m

Если он вернется:

>> which divrat
'divrat' not found.

Это не на пути MATLAB или в PWD.

Во-вторых, убедитесь, что каталог, который содержит divrat, находится на пути MATLAB, используя команду PATH. Возможно, каталог, который, как вы думали, был на пути, на самом деле не находится на пути.

Наконец, убедитесь, что вы не используете «частный» каталог. Если 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

Я экспортировал свой код на Java и запустил его на платформе unix. Как мне сделать это там?

Abhishek Singh 20.07.2018 10:57

Я почти уверен, что эта проблема возникла из-за лицензии на набор инструментов (пакет), в который входит эта функция. Напишите which divrat и посмотрите, каков будет результат. Если он возвращает путь к функции и комментарий Has no license available, значит проблема связана с лицензией. Значит, лицензия пакета установлена ​​неправильно. Чаще всего это происходит, если пакет (набор инструментов) этой функции добавляется позже, то есть после установки исходного matlab. Пожалуйста, проверьте и решите проблему с лицензией, тогда все будет нормально.

Другие вопросы по теме