Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 辛菲:有些术语显然已经消失了_Python_Math_Sympy - Fatal编程技术网

Python 辛菲:有些术语显然已经消失了

Python 辛菲:有些术语显然已经消失了,python,math,sympy,Python,Math,Sympy,我想用下面的代码计算函数的导数 导入sympy pi=符号(“pi”) H类(综合功能): 纳格斯=1 def fdiff(自身,argindex=1): x=self.args[0] return-sympy.functions.exp(-sympy.Pow(x,2)/2)/sympy.sqrt(2*pi) def G(a): 返回( (a+1)*H(1/综合sqrt(a)) -sympy.sqrt(a/(2*pi))*sympy.functions.exp(-1/(2*a)) ) x=符号(

我想用下面的代码计算函数的导数

导入sympy
pi=符号(“pi”)
H类(综合功能):
纳格斯=1
def fdiff(自身,argindex=1):
x=self.args[0]
return-sympy.functions.exp(-sympy.Pow(x,2)/2)/sympy.sqrt(2*pi)
def G(a):
返回(
(a+1)*H(1/综合sqrt(a))
-sympy.sqrt(a/(2*pi))*sympy.functions.exp(-1/(2*a))
)
x=符号(“x”)
共简(共差(G(x),x))
它应该是
G'(x)=H(1/sqrt(x))
,但我得到了

Out[1]:H(1/sqrt(x))-sqrt(2)*sqrt(x/pi)*exp(-1/(2*x))/(4*x)-sqrt(2)*sqrt(x/pi)*exp(-1/(2*x))/(4*x**2)+sqrt(2)*exp(-1/(2*x))/(4*sqrt(pi)*sqrt(x))+sqrt(2)*exp
当人眼看到时,剩下的项显然应该是0

然后,我尝试将H和G的定义中的两个
pi
s改为
sympy.pi
,它会像我预期的那样返回
H(1/sqrt(x))


为什么我的第一段代码会返回一些额外的术语?

Symphy内置了一些规则,允许某些转换发生(有时自动发生)或被禁止(默认情况下)。当您将
pi
定义为符号时,您创建了一个通用符号,唯一的假设是它是可交换的。但是pi的数值是正的。该假设允许类似
sqrt(x/y)
的东西自动重写为
sqrt(y)*sqrt(x)/y
,如果
y
为正:

>>> sqrt(x/y)
sqrt(x/y)
>>> sqrt(x/3)
sqrt(3)*sqrt(x)/3
如果使用上一个表达式并用正值替换符号
pi
,您将得到该重写,然后取消项将取消

>>> print(sympy.simplify(sympy.diff(G(x), x))).subs(pi, 3)
H(1/sqrt(x))
正如Johan指出的,在这种情况下,最好只使用SymPy的
s.Pi

>>> S.Pi.n(3)
3.14