参考: パソコンで見る天体の動き, pp.131-142
local function list2oneColMat(list) local oneColMat = {} for i = 1, #list do oneColMat[i] = {} oneColMat[i][1] = list[i] end return oneColMat end local function neville(...) local listOfLists = {...} local numOfLists = #listOfLists local numOfHs = #listOfLists[1] -- 7 通り計算する。 local X = {} local extrapo = {} for n = 1, numOfLists do X[n] = list2oneColMat(listOfLists[n]) -- 既知の点列を 1 列行列に変換する。 for i = 2, numOfHs do for j = 2, i do X[n][i][j] = X[n][i][j-1] + (X[n][i][j-1] - X[n][i-1][j-1]) / (4^(j-1) - 1) --順次 1/2 刻みで計算する場合の公式。 end end extrapo[n] = X[n][numOfHs][numOfHs] -- 補外値だけ返す。 end return extrapo end -- 確かめる。 do local x = {0.53627861, 0.53951755, 0.54011910, 0.54025730, 0.54029111, 0.54029951, 0.54030161} local y = {5.3627861 , 5.3951755 , 5.4011910 , 5.4025730 , 5.4029111 , 5.4029951 , 5.4030161 } local z = {53.627861 , 53.951755 , 54.011910 , 54.025730 , 54.029111 , 54.029951 , 54.030161 } print("{"..table.concat(neville(x, y, z), ", ").."}") end