什么是凸函数

1.定义

  • 对于函数f(x),如果其定义域domf是凸的,且对于x,ydomf0θ1, 有 

    f(θx+(1θ)y)θf(x)+(1θ)f(y)

    则,f(x)是凸函数。
  • 例: 
    仿射函数:ax+b 
    指数函数:eax 
    幂函数:xα(其中,xR++α>1 或α<0
    绝对值幂函数:|x|pp1 
    其他:xlogxxR++

  • 凹函数实例: 
    仿射函数:ax+b 
    幂函数:xα(其中,xR++0α1)

2.凸函数判定条件

  • 2.1 一阶充要条件 
    f(y)f(x)+f(x)T(yx)
  • 2.2 二阶充要条件 
    2f(x)0
  • 2.3 Jensen不等式 
    f(x)是凸函数,则对0θ1, 有 
    f(θx+(1θ)y)θf(x)+(1θ)f(y)

    进一步可得: 
    f(Ex)Ef(x)

3.凸运算

  • 非负线性组合(nonnegative weighted sum) 
    f(x)凸,则数乘 αf(α0) 和加法 f1+f2 对凸集封闭

  • 仿射组合函数(composition with affine function) 
    f(x)凸,则f(Ax+b)

  • 最大值和极值(pointwise maximum and supremum) 
    f1,f2,...,fn凸,则 

    f(x)=max{f1(x),f2(x),...,fn(x)}

    也为凸函数
  • 复合函数(composition) 
    g:RnRh:RR,则对于复合函数 

    f(x)=h(g(x))

    g凸,h凸且非减,有f凸; 
    g凹,h凸且非增,有f凸; 
    例: 
    g(x)为凸函数时,exp{g(x)}为凸函数 
    g(x)为凹函数且为正时,1g(x)为凸函数

4.共轭函数

  • 定义: 
    函数f(x)的共轭函数为: 
    f(y)=supxdomf(yTxf(x))

    共轭函数有一个非常特别的性质,在对偶问题中有着非常重要的应用。这个性质就是: 
    无论f(x)是否为凸函数,其共轭函数都为凸函数

5.拟凸函数

  • 对于函数f(x),若其定义域以及水平子集
    Sα={x|f(x)α}
    对于任意的α都为凸集,则f(x)为拟凸函数。
  • 实例: 
    |x|logx

6.log-concave函数

  • 定义 
    对于正函数f(x), 如果logf(x)是凹函数,则f(x)是log-concave函数,即对0θ1,有
    f(θx+(1θ)y)f(x)θf(y)1θ
  • 实例: 
    正态分布函数是log-concave
### 凸集的定义及性质 #### 定义 设 \( D \subseteq R^n \),如果对于所有的 \( x, y \in D \) 和所有满足 \( 0 \leqslant \lambda \leqslant 1 \) 的实数 \( \lambda \),都有: \[ \lambda x + (1-\lambda)y \in D \] 则称集合 \( D \) 是凸集[^1]。 #### 性质 - **交集性质**:有限个(或者无限个)凸集的交集为凸集。 - **缩放性质**:假设 \( D \) 是凸集,\( \beta \) 是一个实数,则下面的集合是凸集: \[ \beta * D=\{y | y=\beta * x, x \in D\} \] ### 凸函数的定义及性质 #### 定义 给定区间 \( I \subset R \),若对任何两个点 \( a,b \in I \) 及任意 \( t \in [0,1] \),有: \[ f(ta+(1-t)b)\le tf(a)+(1-t)f(b) \] 则称 \( f(x) \) 在 \( I \) 上为凸函数。这表示连接图像上任两点间的线段总位于这两点间部分图形之上[^5]。 对于多元函数而言,在其定义域内的每一点处都存在这样的不等关系也成立的话,该多变量函数即被视作凸函数[^3]。 #### 判别方法 通过计算二阶导数来判断一元函数是否为凸函数或凹函数。具体来说,当一个函数的一阶导数单调增加时,此函数凸函数;反之亦然。更进一步地讲,如果某连续可微分函数在其整个定义区域内具有非负的二阶导数值,则它必然是一个严格意义上的凸函数[^2]。 ```python import numpy as np from sympy import symbols, diff def is_convex(f_str): """ Check if the given function string represents a convex function by evaluating its second derivative. :param f_str: A string representing mathematical expression of one variable 'x' :return: Boolean indicating whether the inputted function is convex or not """ x = symbols('x') try: # Convert string to SymPy symbolic object and compute derivatives func = eval(f_str) first_derivative = diff(func, x) second_derivative = diff(first_derivative, x) # Evaluate sign of second derivative over domain where it's defined test_points = [-10, -1, 0, 1, 10] signs = all([second_derivative.subs({x:test_point}) >= 0 for test_point in test_points]) return bool(signs) except Exception as e: print(e) return False print(is_convex('-np.log(x)')) # Example usage with concave log function negated into convex form ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值