2013-04-22 2 views
0

Я пытаюсь решить следующую проблему в Matlab. У меня есть функция, которая определяется 5 параметрами и 4 переменными, которые вводятся как данные. Я определяю его как таковой:Функция управления передачей

g = @(b)((b(4)*(b(2)*x(:,1) + b(3)*x(:,2) + 1)) + b(5)*x(:,3)*x(:,4).^b(1));

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

sum_res = @(b)(y-g)'*(y-g); [beta_opt,fval] = fminsearch(sum_res,[1,1]);

Я получаю следующее сообщение об ошибке:

Undefined function 'minus' for input arguments of type 'function_handle'. 

Error in @(b)(y-g)'*(y-g) 


Error in fminsearch (line 191) 
fv(:,1) = funfcn(x,varargin{:}); 

ответ

1

Сообщение об ошибке находится на месте; g - это дескриптор функции, а не тип значения. Поэтому, когда вы выполняете вычитание y-g в вашей функции sum_res, не будет оператора вычитания, который будет принимать дескриптор функции в качестве операнда (как бы вы вычтите дескриптор функции?)

Похоже, вы просто забыли пройти ваш параметр b к вашей g функции ручке внутри вашей sum_res функции (предполагающей б действительно нужный параметр)

sum_res = @(b)(y-g(b))'*(y-g(b)); 
+0

работает отлично: 'х = randn (100,4); y = randn (100,1); g = @ (b) ((b (4). * (B (2). * X (:, 1) + b (3). * X (:, 2) + 1)) + b (5) .. * (х:, 3) * (х: 4).^Ь (1)); sum_res = @ (b) (y-g (b)) '* (y-g (b)); [beta_opt, fval] = fminsearch (sum_res, [1,1,1,1,1]); ' – user2209979

Смежные вопросы