学習日記-MIT[コンピュータ科学とプログラミングの導論]-6

1019 ワード

二分法,ニュートン・ラフソン法,リストの概要
1.二分法(続き):前の授業では、プログラムにバグがあり、xが(0,1)の場合、範囲の調整が適用されないため、反復の過程で平方根を求めることができません.
ここで修正方法:文high=xをhigh=max(x,1)に変更すればよい.
2.Newton-Raphson method Newtonラフソン法:
sqrt(x)の求めに対して,本質はf(guess)=guess*guess−x=0の求めである.
推定数guessでは接線を行い,傾きは2 xであり,x軸との交点値は推定数より解sqrt(x)に近い.
したがって,新しい推測点反復式はguess(i+1)=guess(i)−f[guess(i)]/[2*guess(i)]である.
コードは次のとおりです.
def  squarerootNR(x,epsilon):

    """this function is to return a square root of 

    x within 100 times iteration and may not 

    figure out the true answer"""

    assert x>=0

    assert epsilon>0

    x=float(x)

    guess=x/2.0

    diff=guess**2-x

    cnt=1

    while abs(diff)>=epsilon and cnt<=100:

        guess=guess-diff/(2*guess)

        diff=guess**2-x

        cnt+=1

    assert cnt<=100

    print("The square root of %f=%f,iteration:%d"%(x,guess,cnt))

NR法は二分法よりも効率的であることが試験で分かった.
3.リストに関する知識
1)append、remove方法
2)ネスト可能、可変