Loading [MathJax]/jax/output/HTML-CSS/config.js

2007/03/30

如何估計log7

問:
在已知常用對數 log 2 = 0.3010, log 3 = 0.4771 的前提下,我們知道
log 4 = log(22) = 2·log 2 = 0.6020
log 5 = log(10/2) = log 10 - log 2 = 1 - 0.3010 = 0.6990
log 6 = log(2·3) = log 2 + log 3 = 0.7781
log 7 = ?
log 8 = log(23) = 3·log 2 = 0.9030
log 9 = log(32) = 2·log 3 = 0.9542
log10 = 1

如果手邊沒有計算器,有沒有什麼好辦法,用可接受的紙筆計算複雜度,估計 log7 的值,愈準愈好?


答:
由於沒有標準的做法,這個問題其實需要一點創造力。
至少可以使用下列方法:

線性內插,log 7 ≈ ( log 6 + log 8 )/2 = (0.7781 + 0.9030)/2 = 0.8406,
這個估計,等效於用 log 48 估 log 49

線性內插,用 log 12 和 log 15 估 log14
log 14 ≈ 1/3·(log 12) + 2/3·(log 15) = 1/3·(2log 2+log 3) + 2/3·(log 10+log 3-log 2) = 1/3 · 1.0791 + 2/3 · 1.1761 = 1.1438
log 7 = log 14 – log 2 = 1.1438 - 0.3010 = 0.8428

線性內插,縮小範圍以提高準確度,例如 log 7 ≈ 1/4 · log 6.4 + 3/4 · log 7.2 = 1/4·(6 log 2-log 10) + 3/4·(3 log 2 + 2 log 3 - log 10) = 1/4·(1.8060 - 1) + 3/4·(0.9030 + 0.9541 - 1) = 0.8443

線性內插,用比較平滑的位置,
例如 log 49 ≈ (log48 + log50)/2
log 7 = log49/2 ≈ (log48 + log50)/4 = (0.7781 + 0.9030 + 1.6990)/4 = 0.8450

二次內插。能使用此法,並且能計算出答案者較少。一般可能想用 log(x) ≈ a x2 + b x + c,代入三個點(例如log 5, log 6, log8)解a, b, c之後,再算 log7。然而,除非習於筆算,否則以手算得出正確值的機會甚低。

比較不會出錯的算法是使用下表,由左至右,逐列計算前一列的後項減前項:

 原函數(拋物線)   差分(線性函數)   二次差分(常數) 
 log 5 = 0.6990 (後項減前項)
 log 6 = 0.7781   0.0791 (後項減前項)
 log 7 = x   x - 0.7781  x - 0.8572
 log 8 = 0.9030   0.9030 - x  1.6811 - 2x

得 1.6811 - 2x = x - 0.8572
得 x = 0.8461

這個只是單純的加減算,計算出錯的機率低一點。

同樣的,可以用此法做更高次的內插(例如加入 log 9 和 log 10)以提高精確度。

 原函數(四次函數)   差分(三次函數)   二次差分(二次函數)   三次差分(線性)   四次差分(常數) 
 log 5 = 0.6990  (後項減前項)
 log 6 = 0.7781  0.0791  (後項減前項)
 log 7 = x  x - 0.7781  x - 0.8572  (後項減前項)
 log 8 = 0.9030  0.9030 - x  1.6811 - 2x  2.5383 - 3x  (後項減前項)
 log 9 = 0.9542  0.0512  x - 0.8518  3x - 2.5329  6x - 5.0712
 log10 =1  0.0458  -0.0054  0.8464 - x  3.3793 - 4x

得 6x - 5.0712 = 3.3793 - 4x ,
x = 0.8451

1 則留言:

Unknown 提到...

最上面 log9 是0.9542

Labels