【问题标题】:Passing arguments to objective function fmincon Matlab将参数传递给目标函数 fmincon Matlab
【发布时间】:2013-09-23 01:40:35
【问题描述】:

我试图最小化由约束变量以外的变量组成的目标函数。有没有办法将参数传递给这样的函数,例如:

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

【问题讨论】:

    标签: matlab function mathematical-optimization


    【解决方案1】:

    使用匿名函数创建closures

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

    这是一个文档页面,详细解释了这一点:

    Passing Extra Parameters

    【讨论】:

      【解决方案2】:

      一个简单的解决方案是使用global returns fund

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-27
        • 2022-11-23
        相关资源
        最近更新 更多