2013-09-22 2 views
2

제약 변수 이외의 변수로 구성된 목적 함수를 최소화하려고합니다. 로 정의된다목적 함수 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 

내 목적 함수 추가 변수를 필요로하기 때문에 returnsfund, 무엇을 주요 기능에서 계속 전달할 수있는 최선의 방법은 무엇입니까? 아래 진술이 잘못되었습니다. 그 밖에 내가 뭘 할 수 있습니까? 다음과 같이

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

EXTRA, 기능 제한 조건이 정의됩니다

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

답변

5

사용 익명 함수를 사용하는 것입니다 :

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

여기에서 나는 문서상의 페이지에 자세한 내용이 설명 S :

Passing Extra Parameters

0

쉬운 해결책은 closures을 만들 global returns fund