График погрешности линейной сплайн-интерполяции с python - PullRequest
0 голосов
/ 22 марта 2020

Я попытался реализовать линейную сплайн-интерполяцию и нашел ее ошибку, но когда я отображал ошибку в базе 10 журналов в зависимости от интервала между каждой точкой в ​​базе 10 журналов, я получал, что каждая другая точка работает нормально, но последние несколько точек быть действительно странным. Я не мог понять, что я сделал не так. Может ли кто-нибудь взглянуть на мой код и просто спасти мою жизнь, не глядя на последние три пункта?

def f(x):
    return 2*(3*x**2 -1)/(x**2 +1)**3
def error(x, y, h):
    size = len(x)
    error = 0
    if (size == 2):
        return 2.362186149
    for i in range(0, size - 1):
        lower_bound = x[i]
        upper_bound = x[i+1]
        max_z = abs(opt.fminbound(lambda x: -f(x), lower_bound,upper_bound))
        err = max_z *h**2 /8
        error = error + err
    return error
if __name__ == '__main__':
    import matplotlib.pyplot as plt
    start = -5
    end = 5
    n = np.linspace(1, 50, 50)
    arr = []
    hr = []
    for each in n:
        x = np.linspace(start, end, each + 1)
        y = np.reciprocal(np.array(np.square(x) + 1))
        h = float(end - start) / each
        arr.append(abs(error(x, y, h)))
        hr.append(h)
    log = np.log10(arr)
    hlog = np.log10(hr)
    plt.scatter(hlog, log)
    plt.plot(hlog, log)
    plt.title("log of error vs log h")
    plt.show()

enter image description here

...