我觉得自己像个傻瓜,因为没有看到如何表达这一点。
我需要一个近似于线性函数的阶跃函数,频繁的小步长接近0且更少,更大的步长随着X的增长,接近一些标称的最大步态。
e.g。
/ |
/ |
/____| +5
/|
/ |
/ |
/ |
/____| +5
/|
/ |
/ |
/ |
/____| +5
/|
/ |
/ |
/___| +4
/|
/ |
/__| +3
/|
/_| +2
/| +1
答案 0 :(得分:1)
我假设您需要一个函数,其图形是示例中的水平线。
如果您检查位于该行的图表角落,您会看到x
- 坐标(以及y
- 坐标)是三角形数字{{1它们是算术系列0, 1, 3, 6, 10, 15, ...
众所周知,第n个三角数的公式是
0 + 1 + 2 + 3 + 4 + 5 + ...
这是x = n*(n+1)/2
中的二次方程式。如果我们解决n
的等式并取正偏,我们得到
n
因此,给定一个水平线段上的任何点,我们可以通过获取该表达式的整数部分(floor)来找到它是哪个段。然后,我们使用原始表达式为该段找到适当的n = (-1 + sqrt(8*x + 1)) / 2
值。因此,我们的最终表达,略微简化,是
y
请注意,0.5 * int((-1 + sqrt(8*x + 1))/2) * int((1 + sqrt(8*x + 1))/2)
的上述表达式未定义,x < -1/8
的表达式为零。为了避免这些,只有-1/8 <= x < 0
的图表。这是一行中的表达。在计算机程序中,可以实现一些明显的效率,例如在使用函数值x >= 0
之前计算n = int((-1 + sqrt(8*x + 1))/2)
。您还可以避免负0.5 * n * (n + 1)
值。