数値微分
numerical differentiation
$ g'(a) = \frac{g(a + h)-g(a)}{h}+O(h)
$ g'(a) = \frac{g(a + h)-g(a -h)}{2h}+O(h^2)
2次の差分法
$ h^2 に比例して打切り誤差が小さくなる
$ g'(a) = \frac{g(a)-g(a-h)}{h}+O(h)
より高次の差分法も考えることができる
$ g(x+2h),g(x-2h),\cdots のように考えれば導出できる
2次の前進差分
$ g'(a) = \frac{-g(a + 2h)+4g(a + h)-3g(a)}{2h}+O(h^2)
4次の中心差分
$ g'(a) = \frac{g(a-2h)-8g(a-h)+8g(a+h)-g(a+2h)}{12h}+O(h^4)
刻み幅は近似精度に関わる
刻み幅と近似精度の関係
$ g(x) = x^4+x^3+x^2+x+1
$ g'(x) = 4x^3+3x^2+2x+1
https://gyazo.com/accda47345f4312404a7812fad99db99https://gyazo.com/b7c8e60f76bfc4ce0c0bce1973982506
両端の誤差の性質は違いそうなのがわかるあんも.icon
code:jl
using Plots
g(x) = x^4+x^3+x^2+x+1
g′(x) = 4x^3+3x^2+2x+1 # 微分記号は \prime + Tabで出せる
forward_diff(f, x, h) = (f(x + h) - f(x)) / h
central_diff(f, x, h) = (f(x + h) - f(x - h)) / (2h)
# central_diff4(f, x, h) = (f(x-2h)-8f(x-h)+8f(x+h)-f(x+2h)) / (12h)
x = 1.0
fdiff = forward_diff.(g, x, h)
cdiff = central_diff.(g, x, h)
# savefig(plt, "forward_diff_vs_central_diff.png")
analytical = g′(x)
ferror = abs.(fdiff .- analytical)
cerror = abs.(cdiff .- analytical)
# savefig(plt_err, "forward_diff_vs_central_diff_error.png")