作者Sfly (topos)
看板Math
標題Re: [其他] 數值分析 - 非整數次方 (幕次)
時間Sat Sep 3 13:44:35 2011
※ 引述《driftseed (阿輝)》之銘言:
: ※ 引述《EdisonX (閉上眼的魚)》之銘言:
: : 大家好,我想知道一些非整數次方的算法,不用計算機,用手算即可,
: : 只考慮實數係即可,可假設容許誤差為 10 ** -3。
: : 我找過一些資料了,目前比較有用的想法,以下面例子帶出 (恕數學不好)。
: : 2.5 ** 3.12
: : = 2.5 ** (3.0 + 0.12)
: : = (2.5 ** 3.0) * (2.5 ** 0.12)
: : = (2.5 ** 3.0) * (2.5 ** (12 / 100) )
: : = (2.5 ** 3.0) * ( (2.5 ** 12) ** 0.01 )
: : 這樣是先化成 (整數 + 小數),再將小數化成分數去計算,
: : 但還是卡在 2.5 ** 0.01 (開 100 次根) 該如何算?
: : 若真如此計算,速度略嫌慢,且在小數化為分數再計算時,
: : 又怕誤差更大了。
: : 不知各位對於這問題有什麼想法?謝謝大家。
: 2.5^0.12 按計算機的結果為 1.116227714
: 計算方式為:
: 估計一:
: 2.5^0.12 ≒ (1.5*1.66667)^0.12 = (1.5^0.12) * (1.66667^0.12)
: 而 1.5^0.12 ≒ 1+0.5*0.12 = 1.006
: 1.66667^0.12 ≒ 1+0.66667*0.12 ≒ 1.0800004
: 故 2.5^0.12 ≒ 1.006*1.0800004 = 1.08648 誤差2.7%
: 估計二:
: 2.5^0.12 ≒ {(1.2^5)*1.00469}^0.12 = (1.2^0.6) * (1.00469^0.12)
: 而 1.2^0.6 ≒ 1+0.2*0.6 = 1.12
: 1.00469^0.12 ≒ 1+0.00469*0.12 = 1.0005628
: 故 2.5^0.12 ≒1.12*1.0005628=1.12063 誤差0.4%
: 若 a、b 趨近於 0 時則有:
: b
: (1+a) ≒ 1 + ab
當底數是 a=e 的時候, a^b 是很容易計算的,
利用自然對數, 可以得到
2.5^0.12 = e^0.12*(2.5/e)^0.12
~ e^0.12 *[ 1+ 0.12*(2.5/e - 1)]
e^0.12=1+0.12+0.12^2/2 +0.12^3/6+...
~1.12+0.0072+0.0003 = 1.1275
Thus, 2.5^0.12 ~ 1.1275*(1 - 0.0096) ~ 1.1275-0.0108 = 1.1166
誤差 0.03%
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 131.215.220.164
→ EdisonX :耶,這樣的話不就可以直接用換底算就好,都不用化簡了? 09/03 17:09
→ Sfly :換底其實要算一下log 09/03 17:42
→ EdisonX :嗯嗯, 謝謝您的指教, 受益匪淺 09/03 17:44
推 driftseed :好方法 09/03 21:09