import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import theano
import theano.tensor as T
x = T.dscalar('x')
y1 = T.sin(x)
y2 = x
d_y1 = T.grad(cost=y1, wrt=x)
d_y2 = T.grad(cost=y2, wrt=x)
f = theano.function(inputs=[x], outputs=y1/y2)
f_d = theano.function(inputs=[x], outputs=d_y1/d_y2)
input = np.linspace(-5, 5, 1000)
try:
output = [f(input[i]) for i in range(len(input))]
except:
print("Error is caught. Use L'Hospital's Rule...")
output = [f_d(input[i]) for i in range(len(input))]
output2 = [f_d(input[i]) for i in range(len(input))]
plt.plot(input, output)
plt.plot(input, output2)
plt.show()
Theanoでは、不定形の極限の問題となったとき、自動的にロピタルの定理を適用してそうだ。
x = 0付近では、ロピタルの定理によって近似した関数f_dと元の関数fが一致してそう。
ロピタルの定理とは、あるx付近において、関数f(x)/g(x)が不定形であったときに、
f'(x)/g'(x)で近似できるという定理であるということがよくわかった。