Matlab @fmincon error: «Поставленная целевая функция должна возвращать скалярное значение» - PullRequest
0 голосов
/ 25 октября 2018

РЕДАКТИРОВАТЬ: Чтобы помочь уточнить мой вопрос, я ищу, чтобы соответствовать следующим данным:

enter image description here

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

enter image description here

Итак, моя цель - подогнать эти данные с помощью функции fmincon.

ОРИГИНАЛЬНАЯ ПОЧТА:

У меня есть данные из эксперимента по управлению движением, в котором участники были рассчитаны по времени, когда они выполняли задание, и получили оценку (неудача или успех) на основе их производительности.Как и следовало ожидать, мы предполагаем, что участники будут делать меньше ошибок, поскольку у них будет больше времени для выполнения задачи.

Я пытаюсь приспособить функцию к этим данным с помощью fmincon, но получаю ошибку "Ошибка с использованием fmincon(строка 609) Поставленная целевая функция должна возвращать скалярное значение. "Я не понимаю, а) что это значит, или б) как я могу это исправить.

Ниже приведены некоторые данные и код.Любая помощь с благодарностью.

%Example Data:

time = [12.16 11.81 12.32 11.87 12.37 12.51 12.63 12.09 11.25
7.73 8.18 9.49 10.29 8.88 9.46 10.12 9.76 9.99 10.08
7.48 7.88 7.81 6.7 7.68 8.05 8.23 7.84 8.52 7.7 
6.26 6.12 6.19 6.49 6.25 6.51 6 6.79 5.89 5.93 3.97 4.91 4.78 4.43
3.82 4.72 4.72 4.31 4.81 4.32 3.62 3.71 4.29 3.46 3.9 3.73 4.15
3.92 3.8 3.4 3.7 2.91 2.84 2.7 2.83 2.46 3.19 3.44 2.67 3.49 2.71
3.17 2.97 2.76 2.71 2.88 2.52 2.86 2.83 2.64 2.02 2.37 2.38
2.53 3.03 2.61 2.59 2.59 2.44 2.73 ]

error = [0  0   0   0   0   0   0   0   0   1   0   0   0   0   1   1   1   0   0   0   0   1   1   1   1   1   1   0   0   0   0   1   1   1   0   1   0   1   0   1   1   0   1   1   0   1   1   1   1   1   1   1   1   1   1   1   1   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1];

%Code:

% initial parameters - a corresponds to params(1), b corresponds to params(2)
a = 3.0;
b = -0.01;

LL = @(params) 1/1+params(1)*(log(time).^params(2));
LL([a b]); 
pOpt = fmincon(LL,[a b],[],[]); 

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Я полагаю, что логистическая регрессия будет соответствовать вашим данным и целям.В таком случае, почему бы просто не использовать встроенную функцию Matlab для полиномиальной логистической регрессии?

B = mnrfit(time,error)

Что касается вашей функции LL, вы уверены, что правильно ввели функцию и не пропускаете скобки?

LL = @(params) 1/(1+params(1)*(log(time).^params(2)));

Без скобок ваша функция эквивалентна 1 + a * log (x) ^ b

0 голосов
/ 25 октября 2018

Ошибки происходят от функции LL, которая возвращает количество значений, равное длине time.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...