def D(f): def df(x, dx=0.001): return (f(x+dx)-f(x))/dx return df def f1(x): return x**2 def show(F,Nmax,Xmax,dx,f): for i in range (Nmax + 1): x = i*Xmax/Nmax print (F(x), F(x,dx), f(x), sep = '->') F1 = D(f1) print("производная (х**2)' = 2x:") show (F1,5,1,0.01,lambda x: 2*x)
# результат работы программы
0.001->0.01->0.0
0.4009999999999986->0.4099999999999999->0.4
0.8009999999999962->0.8099999999999996->0.8
1.2010000000000076->1.21->1.2
1.6009999999999636->1.6100000000000003->1.6
2.0009999999996975->2.0100000000000007->2.0
# пытаюсь высчитывать на коленке с помощью калькулятора, чтобы понять каждый шаг итерации
получаются отнюдь не приближенные значения, а точные:
для i = 1 получаем х = 1*1/5=0,2
далее для приращения по умолчанию dx = 0,001 получаем ((0,2+0,001)**2-0,2**2)/0,001 = 0,401
для приращения dx = 0,01 получаем соответственно ((0,2+0,01)**2 - 0,2**2)/0,01 = 0,41
что делаю не так?