【问题标题】:cosd and sind with sympycosd 和 sind 同情
【发布时间】:2015-06-26 12:08:16
【问题描述】:

在 sympy 中似乎没有 cosdsind 的等价物(即余弦和正弦的度数参数)。有没有简单的方法来实现这些功能?

对于 numpy,我做到了:

numpy.cosd = lambda x : numpy.cos( numpy.deg2rad(x) )

类似:

sympy.cosd = lambda x : sympy.cos( sympy.pi/180*x )

适用于评估,但表达式打印为:

cos(pi*x/180)

这不利于可读性(由于 3D 坐标的变化,我的表达很复杂)。有没有办法创建一个 sympy.cosd 函数来评估 cos(pi/180 * x) 但打印 cosd(x)

【问题讨论】:

  • 许多数学公式在以弧度工作时看起来很漂亮,但在以度数工作时sprout pi/180 warts。最好使用弧度并完全避免度数 - 或者如果绝对必须在最后转换为度数。
  • 很公平,感谢您的链接。那么如何更换呢?如果我有一个表达式y=sympy.cos(x)y.subs(sympy.cos, sympy.cosd) 不适用于sympy.cosd 的上述定义(因为它不是一个 sympy 函数,而只是一个普通的 lambda 函数)。 y.subs(x, pi/180*x) 在这里有效,但如果 cos 中的表达式很复杂(如各种参数的多项式表达式),可能不方便搜索哪些参数必须用 pi/180 替换,哪些不能。
  • xthetaphi等为以弧度表示数量的符号。保留这些符号的列表:angles = [x, theta, phi]。然后,在最后,使用y.subs([(angle, angle*pi/180) for angle in angles]) 将符号的含义更改为度数。

标签: python numpy sympy


【解决方案1】:

sympympmath 模块中确实有一个radian converter

sympy.cosd = lambda x : sympy.cos( sympy.mpmath.radians(x) )

【讨论】:

  • 谢谢,但它会打印cos(0.0174532925199433*x),这也不是真的可读。
  • 嗯。这个对我有用。例如,如上定义sympy.cosd后,我输入sympy.cosd(60),它返回0.5。也许这是一个版本的事情?我正在使用sympy 0.7.6
  • sympy.cosd(60) 也给了我0.5。我认为它给出了cos(0.0174532925199433*x),因为参数是一个符号:x=sympy.Symbol('x')我用它来做符号微积分(所以我可以检查公式),然后我将它羔羊化以用于数值应用。
  • 啊,我现在明白了。不知道该怎么做。
  • 我会在这里留下这个答案,以防有人偶然发现这个问题寻找弧度转换器
【解决方案2】:

为了在使用度数时保持符号的完整性,我做了如下操作:

import sympy as sp
def tand(x):
    return sp.tan(x * sp.pi / 180)

def sind(x):
    return sp.sin(x * sp.pi / 180)

def cosd(x):
    return sp.cos(x * sp.pi / 180)

示例结果

In [5]: tand(60)
Out[5]: sqrt(3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多