Référence: [Deep Learning from scratch (p98 4.3.1)](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82 % 89% E4% BD% 9C% E3% 82% 8BApprentissage profond-% E2% 80% 95Python% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% A3% E3% 83% BC% E3% 83% 97% E3% 83% A9% E3% 83% BC% E3% 83% 8B% E3% 83% B3% E3% 82% B0% E3% 81% AE% E7% 90% 86% E8% AB% 96% E3% 81% A8% E5% AE% 9F% E8% A3% 85-% E6% 96% 8E% E8% 97% A4-% E5% BA% B7% E6% AF% 85 / dp / 4873117585)
Que dois-je faire lorsque je souhaite différencier la fonction f au point x? Si vous essayez de calculer comme la formule mathématique, ce sera comme suit.
> Idéal si ce calcul peut être fait
> Mais en raison de l'erreur d'arrondi np.fload32(10e-50)=0.Ce sera 0.
def numerical_diff(f, x):
h = 10e-50
return ( f(x+h) - f(x) ) / h
Alors, procédez comme suit.
def numerical_diff(f, x):
h = 1e-4 # 0.00001
return ( f(x+h) - f(x) ) / h
Cependant, dans ce cas, la différence entre x points et (x + h / 2) points est de 0,00001. Ce sera la différenciation du point (x + 0,000005) entre eux. Puisque la différence entre x et x + h n'a pas été minimisée, il y a une différence. On ne peut pas dire qu'il s'agit d'une différenciation au point x. Ce qui suit est la différenciation de la fonction f au point x.
def numerical_diff(f, x):
h = 1e-4 # 0.00001
return ( f(x+h) - f(x-h) ) / (2*h)
À propos, trouver la différenciation par la différence lorsqu'une valeur minute est donnée s'appelle la différenciation numérique.
import numpy as np
import matplotlib.pylab as plt
def function(x):
return 0.01*x**2 + 0.1*x
def nd1(f, x):
h = 1e-4 # 0.00001
return ( f(x+h) - f(x) ) / h
def nd2(f, x):
h = 1e-4 # 0.00001
return ( f(x+h) - f(x-h) ) / (2*h)
#0 en vraie différenciation.2,0.Ce sera 3, donc plus c'est proche, mieux c'est.
#Pour nd1
print(nd1(function, 5)) # => 0.20000099999917254
print(nd1(function, 10)) # => 0.3000009999976072
#Pour nd2
print(nd2(function, 5)) # => 0.1999999999990898
print(nd2(function, 10)) # => 0.2999999999986347