自定义 CVX 函数 - 覆盖错误

计算科学 matlab 凸优化 简历
2021-12-17 13:33:47

我在 Matlab 中构造了一个凸函数和递增函数(定性类似于指数函数,但我希望避免 exp 的逐次逼近要求)。在我对函数的说明中,我至少采用了两个凸函数,当然这通常不会导致凸函数;但是对于我正在使用的函数,结果是凸的。我的功能是

function y = cost( x )
y = min( inv_pos( -x ), max( square_pos( x + 3 )/4, 1 ) );

对于那些不熟悉 CVX 语法的人,函数是 min( 1/max(-x,0), max(max(x+3,0)^2/4, 1) )。CVX 抛出错误:

Disciplined convex programming error:
    Cannot perform the operation min( {convex}, {convex} )

有什么方法可以让 CVX 相信我的函数确实是凸函数?与它交谈一直没有用。

谢谢

1个回答

不,那里没有。CVX 没有出于任意原因制定的规则。它们与它用来将问题转换为可解决形式的方法直接相关。所以它是不可协商的:如果你不能按照规则表达一个函数,那么 CVX 就不能处理它,因为它不能把它转换成可解的形式。除非你能找到按照规则集表达这个功能的方法,否则 CVX 是不会接受的。