用X增加步态的步进功能

时间:2017-11-03 23:09:13

标签: math

我觉得自己像个傻瓜,因为没有看到如何表达这一点。

我需要一个近似于线性函数的阶跃函数,频繁的小步长接近0且更少,更大的步长随着X的增长,接近一些标称的最大步态。

e.g。

                      /  |
                     /   |
                    /____| +5
                   /|
                  / |
                 /  |
                /   |
               /____| +5
              /|
             / |
            /  |
           /   |
          /____| +5
         /|
        / |
       /  |
      /___| +4
     /|
    / |
   /__| +3
  /|
 /_| +2
/| +1

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)值。

以下是生成的图表(不幸的是留在x的值中),为了清晰起见,添加了垂直虚线和对角线。enter image description here