首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指数增长

指数增长
EN

Stack Overflow用户
提问于 2014-06-03 19:42:57
回答 3查看 275关注 0票数 0

为了达到指数级的增长,我几个小时都在拼命工作。我试过用二阶方程,但结果与我所期望的不一样。让我解释一下。

我有一种基于信用平衡的每次使用支付服务。用户可以随时上传资金到他们的帐户。我希望鼓励客户上传更多的资金,以避免小额支付和更高的交易费用。为了缩短时间,你付出的越多,得到的奖金就越多。例如,用户可以通过两种方式将100美元存入他的帐户:

  • 杰克: 10笔交易每笔10美元
  • 保罗:两笔交易各50元
  • 马克:1笔100美元的交易

保罗应该得到比杰克更高的奖金,但比马克少。现在我试着用这个函数。

代码语言:javascript
复制
for($amount=10;$amount<=5000;$amount +=10)
{
     $rate=0.005;
     $bonus=exp($rate*$amount);
     echo "Deposit ".$amount."$ and gain ".$bonus." bonus<br>";
}

最低存款是10美元,最高存款是5000美元,这就是为什么我循环从10到5000。问题很简单。

代码语言:javascript
复制
Deposit 10$ and gain 1.05127109638 bonus
...
Deposit 100$ and gain 1.6487212707 bonus
...
Deposit 1000$ and gain 148.413159103 bonus
...
Deposit 2500$ and gain 268337.286521 bonus
...
Deposit 5000$ and gain 72004899337.4 bonus

对于小的数量你得到的太少,对于大的数量你得到的太多。我也尝试了不同的范围,例如10到100美元的一定速率,200到1000与另一个(.)但当然,当你存款的金额接近这些限制,你得到的奖金较少。这不符合逻辑。

代码语言:javascript
复制
Deposit 1000$ and gain 54.5981500331 bonus
... here starts the next range ...
Deposit 1250$ and gain 42.5210820001 bonus

我也尝试过这种方法:

代码语言:javascript
复制
function foo($wanted=1000, $rangeLow=10, $rangeHigh=5000){
    $increment=($rangeHigh-$rangeLow)/($wanted+1);
    $r=array();
    for ($i=$rangeLow+$increment;$i<$rangeHigh;$i+=$increment)
        $r[]=$i;
    return $r;
}

我“散布”了1000个加值点,介于10美元到5000美元之间,但随着这一点,我得到了一个线性增长,而我需要一个指数增长。也许解决方案是将这两种方法混合在一起,但我不知道如何。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-06 03:05:41

我终于完成了这项任务。这不是你只能使用PHP就能实现的东西。你也需要一个等式,否则你就无法控制增长。

在我的例子中,我有一个抛物线方程,给出了3个点,其中必须定义最低值和最高值。我想给1000的最高奖金和最低0.1的进口从10美元到5000美元。我是在Excel上用矩阵求值的乘积做的。无论如何,我不会分享整个公式,因为它太具体了。我更愿意和你分享这个故事的PHP方面。

我想在PHP中“转换”我的Excel公式,但是我花了太多的时间来编写矩阵计算,然后我决定寻找一个现有的库。Pear有一个矩阵包。如果您不想重新编译您的get服务器以获得Pear,您可能可以使用这个Pear。我测试了矩阵反转,它起作用了。

我建议你不要使用上面的任何一种解,除非你经常使用矩阵数学。在Excel上或用“旧”笔和纸计算所有必需的值更方便和有效,这样就可以传递到PHP简单的计算,如+、-、*、^2等等。

票数 0
EN

Stack Overflow用户

发布于 2014-06-03 19:58:44

我想你想要pow函数而不是exp

pow返回基值提升到exp的能力。

exp将e返回到arg的强大功能。

例如:

代码语言:javascript
复制
for($amount=10;$amount<=5000;$amount +=10)
{
  $rate=0.05; //adjust as needed, 0.08 makes 5000 -> about x2
  $bonus=pow($amount, $rate);
  echo "Deposit ".$amount."$ and gain ".$bonus." bonus<br>\n";
}

产出:

代码语言:javascript
复制
Deposit 10$ and gain 1.122018454302 bonus
Deposit 20$ and gain 1.1615863496415 bonus
Deposit 30$ and gain 1.1853758165593 bonus
..
Deposit 1000$ and gain 1.4125375446228 bonus
.. 
Deposit 5000$ and gain 1.5309059120639 bonus
票数 2
EN

Stack Overflow用户

发布于 2014-06-03 19:48:40

难道你不需要保留你的exp函数,但是把它乘以小于1的值吗?如果我的数学是正确的,那就会使指数曲线变平。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24023616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档