前回まででは、1階の(偏)微分係数を考察した。今度は、高階の導関数の値(微分係数)も計算するように拡張しよう。簡単のため、1変数関数について考えることにする。
高階微分と演算、関数の合成との関係を見る。変数は t とする。
もとの関数 | 1階導関数、2階導関数 |
---|---|
h(t)=const. | h′(t)=0,h′′(t)=0 |
h(t)=t | h′(t)=1,h′′(t)=0 |
h(t)=f1(t)±f2(t) | h′(t)=f1′(t)±f2′(t),h′′(t)=f′′1(t)±f′′2(t) |
h(t)=f1(t)f2(t) | h′(t)=f1′(t)f2(t)+f1(t)f2′(t),h′′(t)=f′′1(t)f2(t)+2f1′(t)f2′(t)+f1(t)f′′2(t) |
h(t)=f1(t)f2(t) | h′(t)=f1′(t)f2(t)−f1(t)f2′(t)f2(t)2,h′′(t)=f′′1(t)f2(t)−2f1′(t)f2′(t)f2(t)2−f1′(t)f′′2(t)f2(t)2+2f1(t)f2′(t)2f2(t)3 |
h(t)=g(f(t)) | h′(t)=g′(f(t))f′(t),h′′(t)=g′′(f(t))f′(t)2+g′(f(t))f′′(t) |
h(t)=g(f1(t),f2(t)) | h′(t)=gx(f1(t),f2(t))f1′(t)+gy(f1(t),f2(t))f2′(t),h′′(t)=gxx(f1(t),f2(t))f1′(t)2+2gxy(f1(t),f2(t))f1′(t)f2′(t)+gyy(f1(t),f2(t))f2′(t)2+gx(f1(t),f2(t))f′′1(t)+gy(f1(t),f2(t))f′′2(t) |
2階微分の自動微分では、「値」「1階の微分係数」「2階の微分係数」の3つの値を保持する必要があるので、実装するには R×R×R に適切な演算を入れれば良い。上の表の f(t),f′(t),f′′(t) を R×R×R の成分で置き換えると、R×R×R に入れるべき演算が分かる。すなわち、(x,x′,x′′)±(y,y′,y′′)=(x±y,x′±y′,x′′±y′′)(x,x′,x′′)⋅(y,y′,y′′)=(xy,x′y+xy′,x′′y+2x′y′+xy′′)(x,x′,x′′)(y,y′,y′′)=(xy,x′y−xy′y2,x′′y−2x′y′y2−x′y′′y2+2xy′2y3),g:R→R(微分可能) に対し、g∗((x,x′,x′′))=(g(x),g′(x)x′,g′′(x)x′2+g′(x)x′′),g:R×R→R(微分可能) に対し、g∗((x,x′,x′′),(y,y′,y′′))=(g(x,y),gx(x,y)x′+gy(x,y)y′,gxx(x,y)x′2+2gxy(x,y)x′y′+gyy(x,y)y′2+gx(x,y)x′′+gy(x,y)y′′),
とすればよい。ただし、変数についている ′ は微分ではなく変数名の一部と考える。関数についている ′ や添字は微分の意である。
これを実際のプログラミング言語で実装するのは容易だろう。