"Неопределенная функция" имя функции "для входных аргументов типа "double"."

вопрос, который появляется довольно часто в разных формах и размерах: Почему я получаю следующее сообщение об ошибке:

"неопределенная функция' function_name 'для входных аргументов типа'double'."

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

2 ответов


если вы наткнетесь на это сообщение об ошибке, и не знаю, что это означает. Утешьтесь в этом: 90% из нас погуглили ту же фразу.

"неопределенная функция' int 'для входных аргументов типа'double'."

сообщение об ошибке довольно понятно, но все равно может вызвать путаницу. (Я выбрал 'int' наугад, это может быть так же хорошо 'train', 'table', 'my_function' или что-нибудь еще).

есть два основных случая, когда эта ошибка возникает:

  1. вы пытаетесь использовать функцию, которая не существует (пока нет)
  2. вы пытаетесь получить доступ к элементу в переменной, которая не существует (пока нет)

что делать, если вы получаете эту ошибку?

сначала вы можете попробовать which. Это покажет вам, определена ли функция или переменная, которую вы пытаетесь использовать.

which int
'int' not found.

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

which max
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datafun\@logical\max)  % logical method

но вы можете получить следующее, Даже если вы получите "неопределенную функцию "x"...". Если да, то см. пункт 3 ниже.

which x
x is a variable.

1. Но функция " int " существует! Это даже документы!?

да , но только если у вас есть Символических Элементов. С Наборы инструментов-это дополнительные пакеты, которые необходимо приобрести отдельно (и могут быть довольно дорогими), скорее всего, у вас нет этого пакета.

если вы получаете ошибку "неопределенная функция", но находите функцию в документации, посмотрите в меню слева или просто проверьте адрес. Стандартные функции Matlab имеют такие адреса, как:

mathworks.com/help/matlab/ref/max.html
                   ^^^^^^

обратите внимание на часть "matlab". Если вы видите это, то вы используете функцию, которая является частью ядра Matlab.

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

mathworks.com/help/symbolic/int.html
                   ^^^^^^^^

или, может быть, это часть набора инструментов нейронной сети:

mathworks.com/help/nnet/ref/train.html
                   ^^^^ 

устранение: найдите другую функцию, которая не является частью панели инструментов, которой у вас нет. Скорее всего, вы найдете то, что ищете, если вы опытный Гуглер. Если вы не можете найти его, обратитесь за помощью. Объясните, что вы пробовали, и покажите, что вы сделали некоторые усилия!

2. Но функция документы, и является частью ядра Matlab!?

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

введено в R2013b

Итак, если вы используете R2012b, то вы не можете использовать, например table.

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

3. Но переменная "my_variable" существует! Я создал его в линия выше!

нет, не говорил. Скорее всего, вы создали переменную myvariable, my_Variable, my_Variable или что-то подобное в строке выше. Также возможно, что вы создали его, но случайно cleared его.

устранение: пройдите код. Ищите опечатки, места, где вы случайно очистили переменную и т. д. Внутри редактора Matlab вы получите следующую строку внизу, если вы отметите переменная: "3 использования" x "найдено", если вы определили и использовали функцию. Вы также получите оранжевую линию под переменными, которые не используются.

4. Но я получаю "y-переменная", когда я набираю which y?

если вы получите ошибку выше "неопределенная функция "y", но which говорит сообщение об ошибке содержит несколько строк:

my_function(x)
Undefined function or variable 'y'.
Error in my_function (line 2)
t = x*y; 

>> which y
y is a variable.

это говорит вам о том, что у вас есть переменная под названием y in ваш Рабочее Пространство Matlab (также проверить этой ссылке).

проблема в том, что функции не могут получить доступ к этой рабочей области:

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

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

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

5. Но я передаю переменную как вход в функцию, но я все равно получаю то же сообщение об ошибке!?

Да, вы, вероятно, используете переменную в качестве входных данных. Однако имена переменных не обязательно совпадают в разных функциях (чаще всего это не так).

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

function output = my_function(x)  
output = 2*y;
end

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

y = 3;
res = my_function(y)

это потому, что внутри функции my_function, переменная, которую вы используете в качестве ввода, будет называться x, независимо от того, что он назывался вне функции.

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

6. Но я создал x как глобальный varible!?

во-первых: я рекомендую вам не использовать глобальные переменные! Гораздо лучше передавать переменные в качестве аргументов.

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

устранение: перепишите код и передайте переменные в качестве аргументов вместо использования глобальных переменных. Если это не вариант, добавьте global x во всех функциях, где вы используете его.


в дополнение к этому ответу вы можете обратиться к официальному справка Матлаб.


Я получил

функция не определена '...'для входных аргументов типа 'double'.

ошибка, и я попробовал рекомендации, упомянутые выше, но они не смогли решить мою проблему. Затем я понял, что в моем текущем рабочем каталоге есть специальный символ ( * ), поэтому я решаю проблему, когда меняю имя каталога.

наконец, не забудьте изменить текущий каталог после операции изменения с помощью cd аргумент.