找出是否使用了三角函数并跟踪符号变量

时间:2017-03-22 16:44:37

标签: python sympy

我将获得使用三角函数度的数据。

我将使用sympy,因为它使用弧度来表示三角函数,我希望能够转换和使用度数。

但是,我不知道哪个符号变量被用作三角函数的输入。

所以,我会有类似的东西:

import sympy
from sympy import mpmath

a = 2
b = 30
a,b = sympy.symbols('a b')
expr = 'sqrt(a + cos(b))'
expres = sympy.sympify(expr)

print(expres.atoms(sympy.cos))

b30,它以度为单位(因此,在cos(b)次计算中,它必须是度数,而不是同意期望的弧度。)

但是,正如我所说,程序运行的另一次,它将使用另一个符号变量用于三角函数。或者多个三角函数。

我想如果使用atoms来查找表达式中是否有三角函数。然后,不知何故,在使用相应符号变量的地方使用度数而不是弧度。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

可以说,避免此问题的最简洁方法是告诉sympify对所选符号/字符串使用自定义定义,例如:

from sympy.abc import *
from sympy import sin, pi, Lambda, sympify

sin_degree = Lambda(x, sin(x*pi/180))
degree_trigs = {"sin": sin_degree}

expr_string = "sin(a) + sin(b**d + exp(c))"
expr = sympify(expr_string, locals=degree_trigs)
print(expr)

返回:

sin(pi*a/180) + sin(pi*(b**d/180 + exp(c)/180))

答案 1 :(得分:1)

您可以将subs与函数一起使用,例如:

from sympy.abc import *
from sympy import sin, exp, pi, Lambda

sin_degree = Lambda(x, sin(x*pi/180))

expr = sin(a) + sin(b**d + exp(c))
print( expr.subs(sin,sin_degree) )

返回:

sin(pi*a/180) + sin(pi*(b**d/180 + exp(c)/180))