関連: TI-Nspire & Lua / 補外法 5 / 補外にかける点列を中点法で求める -
def midPoints(funcs, t0, inits, H, S): dim = len(funcs) RANGE = 2**S+2 listRange = [None for i in range(RANGE)] temp = [None for i in range(dim)] listS = [None for i in range(S)] t = listRange.copy() t[0] = t0 x = [[] for i in range(dim)] X = x.copy() for i in range(dim): x[i] = listRange.copy() x[i][0] = inits[i] X[i] = listS.copy() for s in range(S+1): N = 2**s hs = H/N t[1] = t[0] + hs for i in range(dim): x[i][1] = x[i][0] + hs * funcs[i](t[0], *inits) for n in range(0, N): t[n+2] = t[n] + 2 * hs for i in range(dim): temp[i] = x[i][n+1] for i in range(dim): x[i][n+2] = x[i][n] + 2 * hs * funcs[i](t[n+1], *temp) for i in range(dim): X[i][s-1] = (1/4) * (x[i][N-1] + 2 * x[i][N] + x[i][N+1]) return X ############################################################ def xDot(t, x, y): return y def yDot(t, x, y): return t - x a = midPoints([xDot, yDot], 0, [0, 0], 0.5, 7) print(a)