最小化matlab中的函数

时间:2011-09-06 13:11:33

标签: matlab constraints mathematical-optimization

关于w,我想最小化w'Hw,其中w是向量,H是矩阵。

并且具有以下约束,| w1 | + | w2 | + | w3 | < 3,即。权重向量的l1范数小于3.

我怎样才能在matlab中做到这一点?

由于

4 个答案:

答案 0 :(得分:2)

您正在尝试使用线性约束(也称为quadratic programming)来解决二次最小化问题。

你对你的矩阵H一无所知 - 特别是它是半正的吗?我真的希望这种情况是这样的,因为这通常适用于通常会出现二次规划问题的问题域。

如果H确实是半正的,那么你的唯一约束是| w1 | + | w2 | + | w3 | < 3,然后,正如Richie Cotton已经指出的那样,最小值在w = 0时是微不足道的。也许你有一些额外的限制?

如果你确实有其他约束条件,但H仍然是半正定的,那么这类问题就存在有效的求解器。在MATLAB中,看一下quadprog

您必须重新制定单个非线性约束| w1 | + | w2 | + | w3 | < 3作为一系列线性约束。

在一维情况下,约束| w1 | < 1变成两个线性约束:

 w1 < 1
-w1 < 1.

在二维情况下,约束| w1 | + | w2 | &LT; 1变为四个线性约束:

 w1+w2 < 1
 w1-w2 < 1
-w1+w2 < 1
-w1-w2 < 1

我会将扩展名留给您三维。

答案 1 :(得分:1)

您需要使用优化工具箱,特别是fmincon

使用fun来建立w'Hw,并且你想要使用nonlcon设置的c(eq) = (|w1|+|w2|+|w3| - 3)&lt; 0(在文档中)。

答案 2 :(得分:0)

我建议您查看matlab文档中的fminsearch函数。

答案 3 :(得分:0)

Rasman,下面是我正在使用的fmincon代码:

    function PortfolioWeights = GMVPC1Type2(SCM)
    w0 = [0.1 0.1 0.1 0.1 0.1];
    n = length(w0);

    options = optimset('Display','final-detailed');
    PortfolioWeights = fmincon(@myobj2,w0,[],[],ones(1,n),1,[],[],@myconstraint1,options)

        function f = myobj2(w)
        w = [w(1);w(2);w(3);w(4);w(5)];
        f = w'*SCM*w;
        end
    end
    -----------------------------------------------------------------------------
    function [c ceq] = myconstraint1(w)

    c = abs(w(1))+abs(w(2))+abs(w(3))+abs(w(4))+abs(w(5))-1
    ceq = [];

    end
    ------------------------------------------------------------------------------

我添加了options = optimset('Display','final-detailed');正如你的建议。我收到以下消息:

Optimization stopped because the predicted change in the objective function,
6.115031e-009, is less than options.TolFun = 1.000000e-006, and the maximum constraint
violation, 0.000000e+000, is less than options.TolCon = 1.000000e-006.

Optimization Metric                                                 Options
abs(steplength*directional derivative) =  6.12e-009        TolFun =  1e-006 (default)
max(constraint violation) =  0.00e+000                     TolCon =  1e-006 (default)

Active inequalities (to within options.TolCon = 1e-006):
  lower      upper     ineqlin   ineqnonlin
                                 1

PortfolioWeights =

    0.2000    0.2000    0.2000    0.2000    0.2000

我使用的矩阵是:

0.000257165759136336    8.48196702102889e-05    9.27141501220362e-05    0.000111360154790061    0.000155196440517440
8.48196702102889e-05    0.000277377166669392    0.000101880007672550    0.000107375764193076    0.000117042329431538
9.27141501220362e-05    0.000101880007672550    0.000300697293925817    0.000112004860252653    0.000134354417344316
0.000111360154790061    0.000107375764193076    0.000112004860252653    0.000311028738698100    0.000147296211557256
0.000155196440517440    0.000117042329431538    0.000134354417344316    0.000147296211557256    0.000376418027192374