【发布时间】:2009-03-04 17:15:45
【问题描述】:
我有一个小数学问题。我想要一个具有这些属性的函数:
- 对于远大于 0 的 x:lim f(x) = x
- 对于远小于 0 的 x:lim f(x) = 0
- 和 f(0) = 1 (抱歉,我这里的 f(1)=1 是错误的!)
- f(x) 应该是monotonically increasing
所以函数应该看起来像这样:
^
| /
| /
| /
___.-+´
--´-----+------>
|
到目前为止我得到的最好的是x/(1 + e^(-x)),但后来我意识到它下降到 0 以下并且不是单调递增的。
GraphFunc Online 对玩转这些功能很有帮助。
此外,如果该函数计算速度很快,那将很有帮助,因为我需要经常执行它。
编辑:我在程序中使用它来限制值。我有一个优化算法,它使用带有Levenberg-Marquardt 算法的曲线拟合。但该算法不允许约束,并在整个实数值范围内进行优化。所以我需要一个这样的函数,这样我就可以添加一个人为的约束,使函数大于 0。一个简单的方法是使用f(x) = x²,但函数不是单调递增的,它有两个最小值。
Levenberg-Marquardt 逼近导数,所以我认为最好还是平滑函数。但我不确定这是否绝对必要。
【问题讨论】:
-
我看不出这与编程有什么关系。
-
在这一点上,我希望看到的不仅仅是语言标签。解释您为什么要以编程方式或类似方式执行此操作。
-
我可以很容易地看到这是如何与编程相关的,但也许 OP 可以添加一些上下文来满足其他人。
-
您是否也在寻找它是平滑的,即导数中没有不连续性?
-
通过编辑,我可以接受它与编程相关的内容。不幸的是,无法删除接近投票。如果它确实关闭,我会观察并投票重新开放。