凸函数的判断(中): 凸函数复合与CVX中的凸函数辨识

本文介绍如何利用CVX工具包快速判断函数的凸性,并详细解释了凸函数的基本形式及其组合规则。通过CVX的语法和实例,读者可以学习如何识别并构造凸函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在上一篇我们总结了凸函数的一些基本性质和重要的一阶二阶条件, 在这一节,我们结合 CVX 工具包的一些使用定义来深入理解 如何快速判断函数是否为凸。 这有两点意义: 1. 学会正确地使用CVX工具包, 防止报错。 2. 学会判断哪些函数是凸函数 —— 既然 CVX可以判断你输入的问题是否为凸问题, 那么我们只需要学习其逻辑即可。

CVX 语法

我们直接从CVX的语法中对凸函数的辨别进行学习。 (最基本的凸函数,我们可以通过上篇所讲的 定义、一阶二阶条件得到, 本篇主要聚焦于 如同从基本的凸函数组合衍生出其他凸函数。 以及 如何快速判断某个函数是否可以写为凸函数的衍生

CVX 定义标准的 凸函数表达形式为:

  • 常数 或 仿射函数
  • 标量的 ppp 次方 (p≥1p\ge 1p1 且为偶数)
  • 多个凸函数的和
  • 凸函数与凹函数的差
  • 凸函数乘以一个正常数
  • 凹函数乘以一个负常数

这是最基本的一些衍生。 但这显然远远不够, 事实上, 更大的一部分函数是通过复合函数得到的。 在CVX中, 每个函数都有两个属性, 分别是 凸性 和 单调性。

凸性分为: 凸, 凹, 仿射, 和 常数 四种 (并不完全互斥, 如仿射 显然既凸且凹)
单调性分为: 单调非增, 单调非减, 不单调。

如CVX中常用的几个函数, 对应的两个性质分别为:
在这里插入图片描述
将函数如此分类, 就是为了后续可以极为快捷地判断 复合函数的凸性。

假设函数 f(x)=h(g(x))f(x) = h(g(x))f(x)=h(g(x)), 当 h(x)h(x)h(x)为凸时, 需要满足:

  • 如果 hhh 非减, 那么 ggg 必须为凸
  • 如果 hhh 非增, 那么 ggg 必须为凹
  • 如果 hhh 无单调性, 那么 ggg 必须为仿射

此时 f(x)f(x)f(x) 为凸。

反之, 如果 h(x)h(x)h(x) 为 凹时, 需要满足:

  • 如果 hhh 非减, 那么 ggg 必须为凹
  • 如果 hhh 非增, 那么 ggg 必须为凸
  • 如果 hhh 无单调性, 那么 ggg 必须为仿射

和之前类似, 我们可以直接从一维情况论证:
由于
f′′(x)=h′′(g(x))g′(x)2+h′(g(x))g′′(x) f^{\prime \prime}(x)=h^{\prime \prime}(g(x)) g^{\prime}(x)^{2}+h^{\prime}(g(x)) g^{\prime \prime}(x) f(x)=h(g(x))g(x)2+h(g(x))g(x)

凹凸性决定了 h′′h^{\prime\prime}h的正负, 而单调性决定了 h′h^\primeh的正负。

简单的记忆方式: 若 h(x)h(x)h(x) 非减, 那么 当 ggghhh 的凸性相同时, fff 也有相同的凸性。若 hhh 非增, 当 ggghhh 凸性相反时, fffhhh 有相同的凸性。

简单来说: fffhhh的凸性一致, 当hhh 非减时 ggghhh 同凸性。

hhh 的变量为向量时, 则要求 hhh 在其每维分量都非减/非增。 具体而言, 此时的 xxx 仍是标量, g:R→Rng:R\rightarrow R^ngRRn, f:Rn→Rf:R^n\rightarrow Rf:RnR。 此时, g(x)g(x)g(x) 可看作 g(x)=[g1(x)⋯gn(x)]g(x)=[g_1(x) \cdots g_n(x)]g(x)=[g1(x)gn(x)], 需要gi(x)g_i(x)gi(x) 均为凸函数/凹函数。 当xxx 也为向量时, 将更加复杂。

CVX 实例

  1. max⁡(∣x∣)\max(|x|)max(x) max( abs( x ) ): 这是一个凸函数, 因为 max⁡\maxmax是一个凸函数且非减, 而 ∣x∣|x|x为凸函数。
  2. sum( square( x ) ): 求和函数是一个仿射函数且在每一维上非减。 而x2x^2x2 是在每一维上 (gi(x)g_i(x)gi(x)) 是一个凸函数, 因此该函数也为凸函数。
  3. sum( sqrt( x ) ): 相对的, 由于x\sqrt{x}x 是凹函数, 因此此函数也为凹。 可以看到, 若 hhh 为 仿射函数, 则当其非减时, 复合函数凸性和ggg一致。
  4. sqrt(f'*x) + min(4,1.3-norm(A*x-b)): CVX可以直接认出这是凹函数。
  5. sqrt( sum( square( x ) ) ): 这个函数其实就是 norm(x), 但如果以一开始这个形式写 CVX将会报错。 因为 x\sqrt{x}x 是凹函数且非减, 因此只有在内部函数也为凹时,可以直接判定复合函数的凸性。 然而此时内部函数为凸。
  6. square( square( x ) + 1 ): 这个函数显然是凸的,因为他可以写为: (x2+1)2=x4+2x2+1\left(x^{2}+1\right)^{2}=x^{4}+2 x^{2}+1(x2+1)2=x4+2x2+1, 然而, 这个语法也无法被CVX识别, 这是因为 外层的 square()并不满足非减的要求。 当x 从 -1 到 0 时, 函数值却减小了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B417科研笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值