如何在Matlab中制定这种约束优化?

时间:2016-04-26 06:54:43

标签: matlab functional-programming constraints

我有这个约束函数,我正在尝试使用MATLAB解决它。

1/2x^T XAXx:IIxII^2=1

转置T的{​​{1}}是对称的nxn矩阵,而A是带有元素X的对角矩阵。此外,x_i表示向量IIxII的欧几里德范数。

我想知道如何在Matlab中制定这个约束函数。

1 个答案:

答案 0 :(得分:1)

您可以使用fmincon。假设您有一个二维问题需要解决。

然后让我们创建对称矩阵A:

R = rand(2,2);
A = 0.5 * (R + R');

然后您的目标函数可以写成:

fun = @(x) 0.5 * diag([x(1) 0 ; 0 x(2)])' * [x(1) 0 ; 0 x(2)] * A * [x(1) 0 ; 0 x(2)] * diag([x(1) 0 ; 0 x(2)]);

您还需要设置等式约束:

function [c,ceq] = mycon(x)
c = [];             % Compute nonlinear inequalities at x.
ceq = x' * x - 1;   % Compute nonlinear equalities at x.
end

最后,您可以使用初始条件x0解决问题:

x0 = [0.3,0.7];
sol = fmincon(fun,x0, [], [], [], [], [], [], @mycon) 

在上面的示例中,问题可能不适合使用fmincon。首先尝试使用矩阵A。否则,请尝试fminsearch