# expression has trig component or not?

Is there any way in Sage to find out whether an expression has any trigonometric component (e.g. sin, cos,... ) or not?

expression has trig component or not?

add a comment

3

There's probably an Expression walker lurking somewhere which could do what the first function does automatically but I don't know where it lives. So instead (with the usual untested warning):

```
def walk_for_operators(someexpr):
tor = someexpr.operator()
if tor: yield tor
for oper in someexpr.operands():
for subtor in walk_for_operators(oper):
yield subtor
trig_ops = set([sin, cos, tan, sec, csc, cot,
sinh, cosh, tanh, sech, csch, coth,
asin, acos, atan, asec, acsc, acot,
asinh, acosh, atanh, asech, acsch, acoth,
atan2])
def has_trig_fn(someexpr):
return any(op in trig_ops for op in walk_for_operators(someexpr))
```

```
sage: x,y = var("x, y")
sage: list(walk_for_operators(x^2))
[<built-in function pow>]
sage: list(walk_for_operators(x^2+4))
[<built-in function add>, <built-in function pow>]
sage: list(walk_for_operators(x^2+4+sin(x)^2))
[<built-in function add>, <built-in function pow>, <built-in function pow>, sin]
sage: list(walk_for_operators((x^2+4+exp(x)^2)/(1-sin(y))))
[<built-in function mul>, <built-in function pow>, <built-in function add>,
sin, <built-in function add>,<built-in function pow>, exp, <built-in function mul>]
sage: # hmm. that's strange, no sub and div?
sage: list(walk_for_operators(x/y))
[<built-in function mul>, <built-in function pow>]
sage: (x/y).operands()
[x, 1/y]
sage: (x/y).operator()
<built-in function mul>
sage: (x/y).operands()[1]
1/y
sage: ((x/y).operands()[1]).operator()
<built-in function pow>
sage: # so it seems the division is processed to a pow (and sub to add with negative arg). okay.
sage:
sage: has_trig_fn(x^2+4)
False
sage: has_trig_fn(x^2+4+sin(x)^2)
True
sage: has_trig_fn((x^2+4+exp(x)^2)/(1-pow(atan2(x,y), 5)))
True
```

Asked: **
2011-02-10 07:49:09 -0500
**

Seen: **177 times**

Last updated: **Feb 10 '11**

How to solve polynomial equation system

Convert exponential form to hyperbolic functions

Solving trigonometric functions

using 'solve' with trigonometric functions

Sage does not simplify trigonometric expresion

Trigonometric simplification for distance on a sphere

No simplification is done to invert trigonometric functions ?

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.