Python / 補外法 / Neville の算法で補外値を求める

関連: TI-Nspire & Lua / 補外法 4 / 何かを偶数次多項式で補外する / Neville の算法で補外値だけを求める / 刻み幅を順次 1/2 にした場合 / 複数の点列に適用する -
 

def neville(listOfLists):
    dim = len(listOfLists)
    S   = len(listOfLists[0])

    output = [None for i in range(dim)]

    x = [v for v in listOfLists] # x = [[xList],[yList],[List]]
    for i in range(dim):
        x[i].insert(0, None) # x = [[0,xList],[0,yList],[0,List]] # 添字をテキストと揃える手段として、使わない [0] 番目の要素を設けておく。
    
    table = [[[None for i in range(S+1)] for i in range(S+1)] for i in range(dim)] # 添字をテキストと揃える手段として、使わない [0] 行目、[0] 列目を設けておく。
    
    for i in range(1,S+1): # テーブルの [1] 列目に点列を並べる。
        for j in range(1,S+1):
            for k in range(dim):
                table[k][i][j] = x[k][i]

    for i in range(2,S+1):
        for j in range(2,i+1):
            for k in range(dim):
                table[k][i][j] = table[k][i][j-1]+(table[k][i][j-1]-table[k][i-1][j-1])/(4**(j-1)-1)
                output[k] = table[k][S][S]

    return output

                    
###################################################################################################
x = [0.53627861, 0.53951755, 0.54011910, 0.54025730, 0.54029111, 0.54029951, 0.54030161]
y = [5.3627861 , 5.3951755 , 5.4011910 , 5.4025730 , 5.4029111 , 5.4029951 , 5.4030161 ]
z = [53.627861 , 53.951755 , 54.011910 , 54.025730 , 54.029111 , 54.029951 , 54.030161 ]
listOfLists = [x,y,z]
        
print(neville([x,y,z]))

f:id:ti-nspire:20180113091747p:plain