【发布时间】:2014-09-10 22:51:08
【问题描述】:
我注意到,没有像 sech(x) 和 csch(x) 这样的函数。
有什么方法可以快速分别定义为 1/cosh(x) 和 1/sinh(x)?
另外,我怎样才能使 sympy 将 arccos 视为 acos?
我正在使用解析器,因此“cos(pi/2)”已正确解析。但我希望以类似的方式解析“arccos(pi/2)”。
【问题讨论】:
我注意到,没有像 sech(x) 和 csch(x) 这样的函数。
有什么方法可以快速分别定义为 1/cosh(x) 和 1/sinh(x)?
另外,我怎样才能使 sympy 将 arccos 视为 acos?
我正在使用解析器,因此“cos(pi/2)”已正确解析。但我希望以类似的方式解析“arccos(pi/2)”。
【问题讨论】:
您可以定义实现所需行为的函数。
import sympy
def sech(x):
return sympy.cosh(x)**(-1)
# sympy.sech = sech
def csch(x):
return sympy.sinh(x)**(-1)
# sympy.csch = csch
arccos = sympy.acos
最初我展示了将它们附加到导入 sympy 时使用的符号的行(现在已注释掉)。这是一个名为monkey patching 的坏习惯,并且会干扰对sympy 的任何更新,这些更新可能会使用这些名称或其他可能在代码中其他地方对sympy 进行了猴子补丁的人。它还会使阅读您的代码的人认为这些属性是原始 sympy 包的一部分。
y = sympy.symbols('y')
print sech(y)
print csch(y)
print arccos(y)
【讨论】:
arccos = acos。
sympy.arccos。只需写arccos = sympy.cos。
arccos 只是另一个 sympy 函数的别名这一事实。一个普通的旧arccos 的来源在它所写的行中并不清楚,并且使用户追踪arccos = sympy.acos 行。
sympy.arccos,它的作用正好相反。如果有人稍后看到sympy.arccos,他们会错误地认为 SymPy 调用了函数 arccos。将arccos 写为局部变量可以清楚地表明这是您自己的别名。