Python 2分法による平方根算出

提供:yonewiki
2022年9月26日 (月) 12:48時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「Pythonの記事へ戻る == ''' プログラム ''' == 平方根を手計算するには2分法というものを使いますが手計算を実際に手で計算するのは骨が折れるので、プログラムでその手順を追うための物です。あまりプログラムは得意ではないので、綺麗なコードとは言えませんが、一例を示しておきます。冒頭にあるnInputに算出したい平方根の数値を与えると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の記事へ戻る