我将有数据,使用学位作为三角函数。
我将使用渐变,因为它使用弧度的三角函数,我希望能够转换和使用学位。
但是,我不知道哪个符号变量被用作三角函数的输入。
所以,我会有这样的东西:
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)计算中,它必须是度,而不是渐近预期的弧度)。
但是,就像我说过的,下一次程序运行时,它将为trigonometric.Or使用另一个符号变量,多个三角函数。
我想,如果使用atoms,以便在表达式中找到是否有三角函数functions.And,那么在任何使用相应符号变量的地方,都要使用度而不是弧度。
有办法这样做吗?
发布于 2017-03-22 19:27:58
可以说,避免此问题的最干净的方法是告诉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))发布于 2017-03-22 17:34:37
您可以在函数中使用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))https://stackoverflow.com/questions/42957862
复制相似问题