Я попытался реализовать линейную сплайн-интерполяцию и нашел ее ошибку, но когда я отображал ошибку в базе 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()