【问题标题】:Math: when do we use logarithms and how does it work?数学:我们什么时候使用对数,它是如何工作的?
【发布时间】:2016-01-16 16:24:18
【问题描述】:

我正在解决:

我们知道蒸发器的含量(以毫升为单位的含量)、每天损失的泡沫或气体的百分比 (evap_per_day) 以及蒸发器不再可用的阈值(阈值)百分比。所有数字都是严格的正数。程序报告蒸发器将停止使用的第 n 天(以整数形式)。

我的递归解决方案:

if (content > (initialContent / 100) * threshold) {
   double postContent = content - (content / 100) * evap_per_day;
   iterations++;
   return recursiveEvaporator(postContent, evap_per_day, threshold, initialContent, iterations);
}

但后来我找到了更复杂的解决方案: return (int)Math.ceil(Math.log(threshold / 100.0) / Math.log(1.0 - evap_per_day / 100.0)); 您能否解释一下对数在这里是如何工作的以及为什么我们选择自然对数?

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为它属于 math.stackexchange.com 或 9 年级。
  • @EJP 这些天,12 年级,并且只适用于即将到来的科学专业......
  • 感谢批评,尽管有人提供了一个强有力的答案。这就是我喜欢 StackOverflow 的原因。
  • @chrylis 我不在。

标签: java logarithm


【解决方案1】:
  • 首先你要得到e的清晰图像,这是自然对数的底。 e - 是常数,表示我们在谈到持续增长

    时所要求的(1 + 1/n)^n 的近似值

    我们看到新出现的“加法”参与了进一步的取幂运算。粗略地说:e^x 是我们在 x 之后的收入,其中 x 是 t*r (t-time; r-rate)

    • ln(y) 是一个反向操作,我们的目的是了解等待 y 收入所花费的时间超过率。

带回您的问题主题 ln(threshold) - 是 t*r(时间 * 速率) ln(1 - evap_per_day) - 是 t*r 演化 90% !但不是初始值,我们再次需要 ln,因为 90% 不断减少,我们应该将其包括在内。 我们将 ln(threshold) 的乘积除以 ln(1 - evap_per_day) 以了解时间。

所以正确的解决方案是:(int)Math.ceil(Math.log(threshold / 100.0) / (ln(1.0 - evap_per_day / 100.0))

【讨论】:

【解决方案2】:

这是一个使用指数衰减和求解时间的案例

指数衰减公式是 A = A_o(1 - r)^t 其中 A 是最终量,A_o 是初始量,r 是衰减率,t 是时间。对于这个问题我们想知道直到初始量等于或低于初始量的阈值百分比的天数,每天以一定的百分比蒸发。我们可以将方程改写为: (使用阈值和 evapPerDay 的百分比值使解释更容易) A_o(阈值) = A_o( 1 - evapPerDay)^t

简化为: 阈值 = (1 - evapPerDay)^t

现在我们使用日志来解决 t

log(阈值) = log((1- evapPerDay)^t)

使用原木定律之一移动 t

log(阈值) = t(log(1-evapPerDay))

求解 t

log(threshold)/log(1-evapPerDay) = t

使用上限四舍五入。

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2012-07-18
    • 2012-08-05
    • 2016-04-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多