我正在用Python编写程序,我需要找到函数的导数(一个用字符串表示的函数)。
x^2+3*x2*x+3有没有可用的脚本,或者有什么有用的东西可以告诉我吗?
发布于 2009-11-22 20:25:58
同情做得很好。
发布于 2009-11-22 20:34:58
如果你被限制在多项式(似乎是这样),基本上有三个步骤:
如果您需要处理像a*x^15125 + x^2 + c这样的多项式,那么对系数列表使用一个dict可能是有意义的,但是在通过这个列表进行迭代时需要更多的注意。
发布于 2009-11-25 08:10:54
你可能会在已经提供的答案中找到你正在寻找的东西。然而,我想简单地解释一下如何计算符号导数。
业务的基础是经营者超载和衍生产品的链规则。例如,v^n的导数是n*v^(n-1)dv/dx,对吗?那么,如果你有v=3*x和n=3,那么导数是什么?答案是:如果是f(x)=(3*x)^3,那么导数是:
f'(x)=3*(3*x)^2*(d/dx(3*x))=3*(3*x)^2*(3)=3^4*x^2链规则允许您“连锁”操作:每个单独的导数都是简单的,而您只是“连锁”的复杂性。另一个例子,u*v的导数是v*du/dx+u*dv/dx,对吗?如果你有一个复杂的函数,你只需把它链起来,就说:
d/dx(x^3*sin(x))
u=x^3; v=sin(x)
du/dx=3*x^2; dv/dx=cos(x)
d/dx=v*du+u*dv正如你所看到的,微分只是一个简单的操作链。
现在操作人员超载。
如果您可以编写一个解析器(尝试编写语法分析器),那么您可以请求它同时计算函数和导数!我这样做(使用Flex/Bison)只是为了好玩,它非常强大。为了得到这个想法,通过重载相应的操作符并递归地应用链式规则来递归地计算导数,所以"*"的计算值对应于函数值u*v,而导数值则是u*der(v)+v*der(u) (在C++中尝试,这也很有趣)。
所以,我知道您并不是想编写自己的解析器--无论如何都要使用现有的代码(访问www.autodiff.org以自动区分Fortran和C/C++代码)。但是知道这些东西是如何工作的总是很有趣的。
干杯,
胡安
https://stackoverflow.com/questions/1779867
复制相似问题