Python 2分法による平方根算出
Pythonの記事へ戻る
プログラム
平方根を手計算するには2分法というものを使いますが手計算を実際に手で計算するのは骨が折れるので、プログラムでその手順を追うための物です。あまりプログラムは得意ではないので、綺麗なコードとは言えませんが、一例を示しておきます。冒頭にあるnInputに算出したい平方根の数値を与えると2分法をnCntに与えられた深さまで算出を繰り返します。nCntが大きいほど近似値の精度が高くなります。
import numpy as np
nInput = 3
nScan = 1
while nInput > np.power(nScan, 2) :
nScan += 1
print('nPrev: ', nScan - 1,'nNext: ', nScan)
nPrev = nScan -1
nNext = nScan
if nInput - np.power(nPrev, 2) < np.power(nNext, 2) - nInput:
fNear = nPrev
else:
fNear = nNext
print('nNear: ', fNear)
fSplit = nInput / fNear
fSplitMedian = (fSplit + fNear) / 2
fValue = (fNear + fSplitMedian) / 2
fPrepreValue = 0
fPrevValue = 0
nCnt = 12
print(nCnt,' fSplitMedian: ', fSplitMedian, 'fValue: ', fValue, 'fSplitMedian^2', np.power(fSplitMedian, 2), 'fValue^2: ', np.power(fValue, 2))
def Nibun_Func(nInput,fValue,fSplitMedian,fPrepreValue,fPrevValue,nCnt):
if nInput > np.power(fValue, 2):
str = '#'
fNear = fValue
fValue = (fNear + fSplitMedian) / 2
nCnt -= 1
else:
str = '+'
fNear = fPrepreValue
fSplitMedian = fValue
fValue = (fNear + fSplitMedian) / 2
if nInput < np.power(fValue, 2):
fValue = fPrepreValue
fPrepreValue = fPrevValue
fPrevValue = fValue
print(str,nCnt,' fSplitMedian: ', fSplitMedian, 'fValue: ', fValue, 'fSplitMedian^2', np.power(fSplitMedian, 2), 'fValue^2: ', np.power(fValue, 2))
if nCnt > 0:
Nibun_Func(nInput,fValue,fSplitMedian,fPrepreValue,fPrevValue,nCnt)
Nibun_Func(nInput,fValue,fSplitMedian,fPrepreValue,fPrevValue,nCnt)
累乗根も手計算できますがさらに複雑です。2項定理の累乗1から9までを使って算出する手法です。
Pythonの記事へ戻る