Передача аргументов целевой функции fmincon Matlab



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



data = xlsread('Returns.xlsx', 'Sheet2','A2:F324');

for i = 1:10
returns = data(i:i+59,1:5);
fund = data(i:i+59,6:6);
lb = [0;0;0;0;0];
ub = [1; 1; 1; 1; 1];
[betas, fval] = fmincon(@obj_function, [0 .2 .2 .2 .2 .2], [], [], [], [], lb, ub, @constraints);
end


И целевая функция определяется как:



function [ value ] = obj_function(betas)
value = returns*betas(2:6) + betas(1);
value = sum((value - fund)^2);
end


Поскольку моя целевая функция нуждается в дополнительных переменных returns и fund, как лучше всего я могу продолжать передавать ее из основной функции? Приведенное ниже утверждение недействительно, что еще я могу сделать?



[betas, fval] = fmincon(@obj_function(returns, fund), [.2 .2 .2 .2 .2], [], [], [], [], lb, ub, @constraints);



Дополнительные функции ограничение определяется следующим образом:



function [ c, ceq ] = constraints( betas )
c = [];
ceq = betas(2)*1 + betas(3)*1 + betas(4)*1 + betas(5)*1 + betas(6)*1 - 1;
end
534   2  

2 ответов:

Используйте анонимные функции для создания замыканий:

a = 1; b = 2;
[...] = fmincon(@(x) myObjFcn(x, a, b), ...)

Вот страница документации, объясняющая это более подробно:

Передача Дополнительных Параметров

Простое решение-использовать global returns fund

Comments

    Ничего не найдено.