【问题标题】:Non-linear counter非线性计数器
【发布时间】:2010-03-09 16:36:52
【问题描述】:

所以我有一个柜台。它应该计算某物的当前数量。为了计算这个,我知道开始日期和开始数量,以及每秒增加计数器的数量。十分简单。棘手的部分是增长不是完全线性的。每天,增量量都会增加一个设定量。我需要通过算法重新创建这个 - 基本上根据起始值、随时间增加的数量以及随时间增加的数量来计算当前日期的确切值。

我的目标语言是 Javascript,但伪代码也可以。

基于AB的解决方案:

var now = new Date();

var startDate1 = new Date("January 1 2010");
var days1 = (now - startDate1) / 1000 / 60 / 60 / 24;
var startNumber1 = 9344747520;
var startIncrement1 = 463;
var dailyIncrementAdjustment1 = .506;
var currentIncrement = startIncrement1 + (dailyIncrementAdjustment1 * days1);

startNumber1 = startNumber1 + (days1 / 2) * (2 * startIncrement1 + (days1 - 1) * dailyIncrementAdjustment1);

你们觉得这合理吗?

【问题讨论】:

  • 我敢打赌,你认为所有这些微积分课程都是无用的......
  • @Ignacio:你什么时候需要微积分来识别算术级数?

标签: algorithm math counter nonlinear-functions


【解决方案1】:

这是一个二次函数。如果t是经过的时间,那么就是通常的at2+bt+c,你可以将前3秒的结果代入a,b,c

或者:使用arithmetic progression sum 的公式,其中a1 是初始增量,d 是您所指的“设定数量”。只是不要忘记将您的“起始金额”添加到公式给您的金额中。

若x0为初始量,d为初始增量,e为增加增量的“设定量”,则为 x0 + (t/2)*(2d + (t-1)*e)

【讨论】:

  • 算术级数解决方案是否仅适用于谨慎增加?我提出问题的方式暗示这确实是我正在寻找的,但是如果增加在一天中持续发生,而不是每天都在谨慎的步骤中发生,那么有些事情告诉我我需要使用不同的公式.一位同事提出了某种积分,但我的数学背景不足以对该解决方案的潜在功效做出任何初步判断。谢谢你的帮助,帕特里克
  • @uncultured:你几乎回答了你自己的问题。当您从离散设置转移到连续设置时,总和被积分取代,差被导数取代。其余的在很大程度上取决于您的案件的具体情况。
  • 再次感谢。我认为算术级数解决方案足以满足我的需求。这些数字是营销的,不是科学的或任务关键的,所以创建一个与现实完美的模拟是多余的。
【解决方案2】:

如果我正确理解您的问题,您有一个初始值x_0,每秒初始增量为d_0,增量调整为每天e。也就是说,第一天每秒的增量是d_0,第二天每秒的增量是d_0 + e,等等。

然后,我们注意到在时间t 每秒的增量是

d(t) = d_0 + floor(t / S) * e

其中S 是每天的秒数,t 是自t = t_0 以来经过的秒数。那么

x = x_0 + sum_{k < floor(t / S)} S * d(k) + S * (t / S - floor(t / S)) * d(t)

是您正在寻找的公式。从这里,您可以将其简化为

x = x_0 + S * floor(t / S) d_0 + S * e * (floor(t / S) - 1) * floor(t / S) / 2.

【讨论】:

    【解决方案3】:
    use strict; use warnings;
    
    my $start = 0;
    my $stop = 100;
    my $current = $start;
    
    for my $day ( 1 ..  100 ) {
        $current += ($day / 10);
        last unless $current < $stop;
        printf "Day: %d\tLeft %.2f\n", $day, (1 - $current/$stop);
    }
    

    输出:

    天:1 剩下 1.00
    天数:2 还剩 1.00
    天数:3 还剩 0.99
    天数:4 还剩 0.99
    天数:5 还剩 0.98
    ...
    天数:42 还剩 0.10
    天数:43 还剩 0.05
    天数:44 还剩 0.01

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2015-07-04
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多