2013-09-22 93 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 

回答

0

一個簡單的解決方案是使用global returns fund