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

2014年6月10日 星期二

對數 (logarithm)

http://4rdp.blogspot.com/2014/06/logarithm.html?m=0



以前曾經寫文說明開根號的數學計算,今天就說明工程計算機另一重要計算功能 ─ 對數


對數的發明,是因為數學家想簡化算數乘除計算的繁瑣,對數的方法於1614年被約翰·納皮爾 (John Napier) 在 Mirifici Logarithmorum Canonis Descriptio  (Description of the Wonderful Rule of Logarithms書中首次公開,而對數符號 log 來自拉丁文 logarithm,是由義大利數學家卡瓦列里 (Cavalieri,1598 - 1647) 所提出。

對數的觀念簡單的說,把數值乘除轉換成數值加減,在計算機發明前需要查表換算,加減計算後再反查表求出最後答案,因此有人發明計算尺,解決查表換算問題。

log(X*Y) = log(X) + log(Y)
log(X/Y) = log(X) - log(Y)
log(Xa) = a * log(X)

另外,為了區別以 10 為基底及超越數 e (Euler's number) 為基底的對數,數學習慣分別表示為 log(X)ln(X),而計算機語言喜歡用 log10(X)及 log(X)表示。在日常應用方面,由於人類對外界感覺的魯鈍,也運用了許多對數的觀念,例如,聲音用分貝、地震用芮氏規模、天文觀測用星等,意思是訊號要變化很大,人們才會有所感覺。

回歸主題,本文的要點為計算機如何計算對數值?在資料型態認識─浮點數 (single & double) 一文提到,任何正實數可以表示為 R=2nun 是整數,1u<2,那

lnR=ln(2nu)=nln(2)+ln(u)

接下來就要思考如何計算 ln(u),這需要
從等比級數和說起,令 Y 為等比級數和,將它減掉與 x 相乘的值等於 1,因此 Y 可得一個生成函數 11x

Y=1+x+x2+x3+

xY=x+x2+x3+x4+

YxY=1

Y=11x=1+x+x2+x3+,|x|<1

如果要讓等比級數和 Y 收斂等於生成函數,其要件為 |x|1。然後將 Yx 積分可得,

Ydx=11xdx=ln(1x)+c=x+x22+x33++c

ln(1x)=x+x22+x33+

將上式 x 改以 x 代入

ln(1+x)=xx22+x33x44+

然後兩式合併

ln1+x1x=ln(1+x)ln(1x)=2x+2x33+2x55+

可能有人看到這裡,覺得越搞越複雜,其實這是計算機快速收斂最好的方法,因為計算 ln(1+x) 將需要計算更多項次才能達到更好的精確度,如果要精確到小數第 n 位,必須算到 x2n+1 。那如何求出 x?令

lnu=ln1+x1x=2x(1+x23+x45+)

u=1+x1xx=u1u+1,1u<20x<13

以上是超越數 e 為基底的對數計算,若想計算以 10 為基底的對數可以利用下列公式換算

logR=lnRln10

授權程式人雜誌 2014 七月刊文

沒有留言:

張貼留言