Ошибка MATLAB: Неопределенная функция или метод X для входных параметров типа, 'двойного' [дубликат]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

19
задан Shai 25 April 2013 в 06:28
поделиться

6 ответов

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

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

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

, Если это возвращается:

>> which divrat
'divrat' not found.

Это не находится на пути MATLAB или в PWD.

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

Наконец, удостоверьтесь, что Вы не используете "частный" каталог. Если divrat будет в каталоге, названном частным, то это будет доступно функциями в родительском каталоге, но не из командной строки 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
28
ответ дан 30 November 2019 в 03:08
поделиться

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

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

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

5
ответ дан 30 November 2019 в 03:08
поделиться

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

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

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

    , Таким образом, первое, что нужно сделать, удостоверяются, что файл locatable на пути.

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

4
ответ дан 30 November 2019 в 03:08
поделиться

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

2
ответ дан 30 November 2019 в 03:08
поделиться

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

Между прочим, почему Вы просто не сказали

s = sqrt(diag(C));

Разве, это не будет то же?

2
ответ дан 30 November 2019 в 03:08
поделиться

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

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

which divrat
2
ответ дан 30 November 2019 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: