Здесь происходят две вещи.Сначала вы определяете свою функцию динамически, а не в своем собственном файле;не знаю, почему вы бы предпочли это.
Во-вторых, после определения этой computeCost
функции вы вызываете ее из контекста, в котором вы не передали аргумент y
(или, по-видимому, вы этого не сделалипередайте ему any аргументов, и y
окажется первым из них, обнаруженным как отсутствующий внутри функции).
Поскольку это функция стоимости, и ваш код подозрительно похож на код изКурс Эндрю Нга по машинному обучению на Coursera, я собираюсь выйти здесь на конечность и предположить, что вы вызвали computeCost
из чего-то другого, что должно было использовать его как оптимизируемую функцию стоимости, например, fminunc
.Обычно такие функции, как fminunc
, ожидают дескриптор функции в качестве аргумента, но они также ожидают очень специфический дескриптор функции.Если вы посмотрите на help
из fminunc
, то будет указано, что:
FCN должен принять вектор (массив), определяющий неизвестные переменные,
и вернуть значение целевой функции, опциональнос градиентом.
Поэтому, если вы хотите передать функцию, которая должна быть вычислена с тремя аргументами, вам нужно «обернуть» ее в свой собственный дескриптор, который вы можете определить на месте,например, @(x) computeCost(x, y, t)
(при условии, что 'y' и 't' уже существуют).
Итак, я предполагаю, что вместо вызова fminunc вот так: fminunc( @(x) computeCost(x, y, t)
,
вы, вероятно, назвали его так: fminunc( @computeCost )
или даже так: fminunc( computeCost )
(который сначала оценивает функцию, а не передает дескриптор функции в качестве аргумента).
По сути, вернитесь к коду, данному вамКонечно, или внимательно прочитайте заметки.Вы называете вещи неправильно.