数学:我们什么时候使用对数,它是如何工作的?
Math: when do we use logarithms and how does it work?
我正在解决:
We know the content of the evaporator (content in ml), the percentage of foam or gas lost every day (evap_per_day) and the threshold (threshold) in percentage beyond which the evaporator is no longer useful. All numbers are strictly positive. The program reports the nth day (as an integer) on which the evaporator will be out of use.
我的递归解决方案:
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));
你能解释一下对数在这里是如何工作的以及为什么我们选择自然对数吗?
首先你要得到e
的清晰图像,也就是自然对数的底数。
e
- 是常量,表示我们在谈论 持续增长
时所要求的 (1 + 1/n)^n
的近似值
我们看到新出现的"addition"参与了进一步的exponentiation.Roughly发言:e^x是我们在x之后的收入,其中x是t*r(t-time;r-rate)
- ln(y)是一个反向操作,我们的目的是知道等待y收入所花费的时间。
带回你的问题的主题
ln(threshold)
- 是 t*r(时间 * 速率)
ln(1 - evap_per_day)
- 是 90% 的 t*r !但不是初始值,我们再次需要 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))
这是使用指数衰减求解时间的案例
指数衰减公式为 A = A_o(1 - r)^t 其中 A 是最终量,A_o 是初始量,r 是衰减率,t 是time.For 这个问题我们想知道在初始数量达到或低于初始数量的阈值百分比之前的天数,每天以一定的百分比蒸发。我们可以这样重写等式:
(使用 threshold 和 evapPerDay 的百分比值使解释更容易)
A_o(阈值) = A_o( 1 - evapPerDay)^t
简化为:
阈值 = (1 - evapPerDay)^t
现在我们使用对数来求解 t
日志(阈值)=日志((1- evapPerDay)^t)
使用对数定律之一移动 t
日志(阈值)= t(日志(1-evapPerDay))
求解 t
log(阈值)/log(1-evapPerDay) = t
使用上限取整。
我正在解决:
We know the content of the evaporator (content in ml), the percentage of foam or gas lost every day (evap_per_day) and the threshold (threshold) in percentage beyond which the evaporator is no longer useful. All numbers are strictly positive. The program reports the nth day (as an integer) on which the evaporator will be out of use.
我的递归解决方案:
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));
你能解释一下对数在这里是如何工作的以及为什么我们选择自然对数吗?
首先你要得到
e
的清晰图像,也就是自然对数的底数。e
- 是常量,表示我们在谈论 持续增长
时所要求的(1 + 1/n)^n
的近似值我们看到新出现的"addition"参与了进一步的exponentiation.Roughly发言:e^x是我们在x之后的收入,其中x是t*r(t-time;r-rate)
- ln(y)是一个反向操作,我们的目的是知道等待y收入所花费的时间。
- ln(y)是一个反向操作,我们的目的是知道等待y收入所花费的时间。
带回你的问题的主题
ln(threshold)
- 是 t*r(时间 * 速率)
ln(1 - evap_per_day)
- 是 90% 的 t*r !但不是初始值,我们再次需要 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))
这是使用指数衰减求解时间的案例
指数衰减公式为 A = A_o(1 - r)^t 其中 A 是最终量,A_o 是初始量,r 是衰减率,t 是time.For 这个问题我们想知道在初始数量达到或低于初始数量的阈值百分比之前的天数,每天以一定的百分比蒸发。我们可以这样重写等式: (使用 threshold 和 evapPerDay 的百分比值使解释更容易) A_o(阈值) = A_o( 1 - evapPerDay)^t
简化为: 阈值 = (1 - evapPerDay)^t
现在我们使用对数来求解 t
日志(阈值)=日志((1- evapPerDay)^t)
使用对数定律之一移动 t
日志(阈值)= t(日志(1-evapPerDay))
求解 t
log(阈值)/log(1-evapPerDay) = t
使用上限取整。