You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改造指数函数构造[0,B]定义域映射到[1,A]值域的饱和函数

问题说明

需要构造指数型饱和函数,要求定义域为$[0,B]$时,输出值域恰好为$[1,A]$,目标特性参考示意图:
饱和函数示意图

初始实现代码如下,存在缩放逻辑缺陷,无法满足f(0)=1的约束:

def sat_f(x, A, B, base=1.5):
   y = np.power(base, x)
   y_max = np.power(base, B)
   norm_coeff = A / y_max
   y = norm_coeff * y
   return y
修正方案

函数形式推导

要同时满足两个边界约束:

  • $x=0$时,$f(0)=1$
  • $x=B$时,$f(B)=A$

原实现直接对指数项做等比缩放,会破坏x=0点的取值,正确的构造逻辑是先做值域平移再做缩放,步骤如下:

  1. 取基础指数项$base^x$,它在$x\in[0,B]$区间的原生取值范围是$[1, base^B]$
  2. 向下偏移1得到中间项$base^x - 1$,此时取值范围变为$[0, base^B - 1]$
  3. 按比例缩放中间项,让x=B时中间项的取值刚好为$A-1$(即从1到A的总增量),缩放系数为$\frac{A-1}{base^B - 1}$
  4. 向上偏移1把值域下限抬升到1,得到最终函数形式:
    $$f(x) = 1 + (A-1) \cdot \frac{base^x - 1}{base^B - 1}$$

边界验证:

  • 代入x=0:$f(0)=1 + (A-1)\cdot\frac{1-1}{base^B -1}=1$,符合左边界要求
  • 代入x=B:$f(B)=1 + (A-1)\cdot\frac{base^B -1}{base^B -1}=A$,符合右边界要求

修正后代码

import numpy as np

def sat_f(x, A, B, base=1.5):
    # 处理B=0或base趋近1的特殊边界
    if np.isclose(B, 0):
        return 1.0
    if np.isclose(base, 1):
        ratio = np.clip(x, 0, B) / B
        return 1 + (A - 1) * ratio
    exp_x = np.power(base, x)
    exp_B = np.power(base, B)
    y = 1 + (A - 1) * (exp_x - 1) / (exp_B - 1)
    # 可选:超出[0,B]区间时截断到饱和值
    y = np.where(x < 0, 1, y)
    y = np.where(x > B, A, y)
    return y

参数说明

  • 调整base值可以改变曲线陡峭度:base越接近1,曲线越接近线性增长;base越大,前期增长速度越快,越早进入饱和平缓段
  • 代码中默认加了区间截断逻辑,输入x超出[0,B]范围时会直接输出边界值1或A,不需要可以删除对应判断。

当base取值趋近于1时,该函数会自动退化为线性饱和函数$f(x)=1+(A-1)\cdot\frac{x}{B}$,兼容线性场景需求。

内容的提问来源于stack exchange,提问作者jumpincrane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:06:22