我将获得使用三角函数度的数据。
我将使用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))
b
为30
,它以度为单位(因此,在cos(b)
次计算中,它必须是度数,而不是同意期望的弧度。)
但是,正如我所说,程序运行的另一次,它将使用另一个符号变量用于三角函数。或者多个三角函数。
我想如果使用atoms
来查找表达式中是否有三角函数。然后,不知何故,在使用相应符号变量的地方使用度数而不是弧度。
有办法做到这一点吗?
答案 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))