Aitken's process

エイトケン加速

数列の収束する値を速く計算したい、という時に使うアルゴリズムである。

ja.wikipedia.org

 

====================

from numba import jit
import numpy as np
import matplotlib.pyplot as plt

@jit
def f_aitken(s0,s1,s2):
    return (s2 * s0 - s1 ** 2) / (s2 + s0 - 2 * s1)

@jit
def f_series(n):
    series_list = [(-1) ** k / (2 * k + 1) for k in range(n+1)]
    return series_list

@jit
def init_aitken(n):
    x = f_series(n)
    for i in range(n):
        x[i + 1] = x[i] + x[i + 1]
    return x

 

def main():
    n = 10
    series = init_aitken(n)
    for i in range(2):
        new_series = [0] * (n + 1)
        for j in range(i + 1, n - i):
            value = f_aitken(series[j - 1], series[j], series[j + 1])
            new_series[j] = value
        series = new_series
    return series

x = main()
print(x)

====================