【发布时间】:2013-12-28 15:34:42
【问题描述】:
我想使用 python 在 0.1 中计算 y=Abs(0.5-0.5*sqrt(1-4*x)) 的导数。
这是我的代码:
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,这就是我得到的:
看完这个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 下的函数的导数,则没有问题。
【问题讨论】:
-
附带说明:在
x=0,您的函数不可微分。我不知道 simpy 是如何处理这个问题的。您是否尝试过其他x值? -
我做了,但总是一样:全局名称'Derivative'未定义,无论我选择什么 x。 :)
-
我用我的设置检查了你的初始代码,我得到了错误
NameError: global name 'Abs' is not defined,但前提是我选择'numpy'作为模块。没有或有('numpy','sympy')都可以。但是,您仍然会在x=0处收到除法错误。 -
总是错误
NameError: global name 'Derivative' is not defined。 -
NameError: global name 'Abs' is not defined是由于我的旧版本 sympy 中的一个错误,可能与您的问题无关。
标签: python-2.7 numpy sympy derivative