gpt4 book ai didi

python-2.7 - 在python中使用Abs查找函数的导数

转载 作者:行者123 更新时间:2023-12-04 19:07:29 27 4
gpt4 key购买 nike

我想计算 y=Abs(0.5-0.5*sqrt(1-4*x)) 的导数在 0.1 中,使用 python。
这是我的代码:

x=Symbol('x')
y=Abs(0.5-0.5*sqrt(1-4*x))
deriv=y.diff(x)
d=lambdify(x,deriv,'numpy')
print d(0.1)

这就是我得到的:
Traceback (most recent call last):
File "/home/milossimic/g4/s1/.../optimize.py", line 100, in <module>
print d(0.1)
File "<string>", line 1, in <lambda>
NameError: global name 'Derivative' is not defined

我是 sympy 的新手和 numpy ,所以我想我使用错误的方法来确定导数。

编辑:我打印了 deriv,这就是我得到的:

enter image description here

看完这篇 http://docs.sympy.org/dev/modules/functions/elementary.html , 我试过 fdiff() :
x=Symbol('x')
y=Abs(0.5-0.5*sqrt(1-4*x))
deriv=y.fdiff()
d=lambdify(x,deriv,'numpy')
print d(0)

但是在尝试使用其他值来计算导数后,我发现结果是 -1、0 或 1,因为 deriv实际上是 sign(-0.5*sqrt(-4*x + 1) + 0.5) .

我该怎么办?

numpy 和 sympy 都被导入:
from sympy import *
import numpy as np

如果我尝试找到不在 Abs 下的函数的导数,则没有问题。

最佳答案

这更像是一个数学问题,而不是其他任何问题。

>>> import sympy
>>> x = sympy.symbols('x')
>>> def f(x):
... return abs(x)
...
>>> dx = f(x).diff(x)
>>> dx
(re(x)*Derivative(re(x), x) + im(x)*Derivative(im(x), x))/Abs(x)

注意有实部和虚部。 abs(x) 在每个实数 x 处都是可微的,但为零。但是,还有 issues当涉及到复数值时(我无法解释,因为我不知道复数微分)。我猜 sympy 没有实现,因此返回 Derivative(f)而不是 f 的实际导数。

如果您只使用实数,那么只需使用 x = sympy.symbols('x', real=True) :
>>> import sympy
>>> x = sympy.symbols('x', real=True)
>>> def f(x):
... return abs(0.5-0.5*(1-4*x)**0.5)
...
>>> dx = f(x).diff(x)
>>> dx
(1.0*(-0.5*re((-4*x + 1)**0.5) + 0.5)*re((-4*x + 1)**(-0.5)) - 0.5*im((-4*x + 1)**(-0.5))*im((-4*x + 1)**0.5))/Abs(-0.5*(-4*x + 1)**0.5 + 0.5)
>>> dx_ = sympy.lambdify(x, dx)
>>> dx_(0.1)
1.2909944487358056

关于python-2.7 - 在python中使用Abs查找函数的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20816229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com