我有这个约束函数,我正在尝试使用MATLAB解决它。
1/2x^T XAXx:IIxII^2=1
转置T
的{{1}}是对称的nxn矩阵,而A
是带有元素X
的对角矩阵。此外,x_i
表示向量IIxII
的欧几里德范数。
我想知道如何在Matlab中制定这个约束函数。
答案 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
。