Python / 補外法 / 補外にかける点列を中点法で求める

関連: 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)

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