Matlab中CVX中cvx find的使用问题?

Matlab中,cvx中的cvx find是否是用于寻找问题可行解的?如果是,能否直接寻找非凸问题的可行解?
举例:对于(|H1eH2+H3|^2)/(|H4eH5+H6|^2)+Z1 <= Z2
其中H123456为向量,Z12为常数均已知,求一个e的可行解。只是举例

是的,cvx中的cvx_find函数用于寻找问题的可行解,可以用于非凸问题。
对于给定的优化问题(|H1eH2+H3|^2)/(|H4eH5+H6|^2)+Z1 <= Z2,可以使用cvx建模语言描述,如下所示:

cvx_begin
    variable e
    minimize pow_pos(norm(H1*e*H2+H3),2)/pow_pos(norm(H4*e*H5+H6),2) + Z1
    subject to
        pow_pos(norm(H1*e*H2+H3),2)/pow_pos(norm(H4*e*H5+H6),2) + Z1 <= Z2
cvx_end

其中,cvx_begin和cvx_end之间是优化问题的描述,variable e定义了待求解的变量,minimize表示要最小化的目标函数,subject to表示要满足的约束条件。使用pow_pos函数来表示范数的平方。

使用cvx_find函数可以寻找问题的可行解,如下所示:

cvx_begin
    variable e
    minimize pow_pos(norm(H1*e*H2+H3),2)/pow_pos(norm(H4*e*H5+H6),2) + Z1
    subject to
        pow_pos(norm(H1*e*H2+H3),2)/pow_pos(norm(H4*e*H5+H6),2) + Z1 <= Z2
cvx_end

if strcmp(cvx_status, 'Infeasible')
    error('Problem is infeasible');
end

if strcmp(cvx_status, 'Unbounded')
    error('Problem is unbounded');
end

e_feas = cvx_find;  % finds a feasible solution

这里先通过cvx_end得到问题的最优解,然后通过cvx_find函数寻找一个可行解。如果问题不可行或无界,将抛出异常。