普通python中的链规则

时间:2019-12-26 21:10:21

标签: python math derivative chain calculus

我看到sympy的问题已得到解答,但是我正试图在没有第三方库的玩具项目中出于教育目的编写链式规则的实现。

基本连锁规则是PictureField

我具有以下功能:

k'(x) = f'(g(x)) * g'(x) where k(x) = f(g(x))

问题是,当我为def g(x): return x**3 + 2 def f(x): return x**2 + 7 def de(fn, x, step): t1 = fn(x) t2 = fn(x+step) return (t2 - t1) / step def chain(x): return f(g(x)) def de_chain(x, step): d_g = de(g, x, step) gres = g(x) d_f_g = de(f, gres, step) return d_g * d_f_g de_chain评估de(chain)x=1.2时,我得到step=2.6de(chain) = 205.5446...

这里有些错误,因为像de_chain = 1238.6639...中一样,相同的方法也适用于加法和减法 结果非常接近。我在做什么错了?

谢谢

1 个答案:

答案 0 :(得分:2)

您的代码看起来正确。问题在于,仅凭一个差值进行导数估计通常并不十分准确,并且此处的步长很大。请记住,导数是您的de函数,但是当step变为0时,它是函数的极限

只考虑您的g(x)。它在x=1的实际导数是3*x^2 = 3 * 1^2 = 3。但是,如果步长为2.6,那么您将获得4.6的估算值,这与实际目标相去甚远。

您可以在此处了解有关估算导数的更准确方法:https://en.wikipedia.org/wiki/Numerical_differentiation