-2

私はz(x)w.r.tを区別しようとしています。 xはy(x)とz(y)を知っているadライブラリを使用しています。分析的にz(x)を見つけることができない場合、どうやって分化を行うことができますか?言い換えれば、私は以下に示すようにチェーンルールの計算を避けるためにしようとしています:関数の関数をどのように区別できますか?

from ad import gh 

def y(x): 
    return 2*x 

def z(y): 
    return 3*y 

dzdy,hy = gh(z) 
dydx,hz = gh(y) 

x0 = 0 # does not matter for this example 
dydx_x0 = dydx(x0) 

y0 = y(x0) 
dzdy_y0 = dzdy(y0) 

dzdx_x0 = dzdy_y0[0] * dydx_x0[0] 

print(dzdx_x0) # dz/dx = dz/dy*dy/dx = 3*2 = 6 
+0

数値パッケージと科学パッケージを調べましたか?私は、トピック検索があなたに*いくつかの*結果をもたらし、部分的な解決策として提示すると思います。 – Prune

+3

'ad'は[this library](https://pypi.python.org/pypi/ad/1.2.3)です。私はこれが単なるナンセンスのインポート例だと思った... –

答えて

2
def z_of_x(x): 
    return z(y(x)) 

gradient, hessian = gh(z_of_x) 

だけxの面でzを計算し、いつものように自動微分を適用するための関数を定義します。

関連する問題