1 | initial version |

To replace an subexpression **inside a sum or a product** you can do

```
sage: t = SR.var('t')
sage: formula = sin(2*t) + sin(4*t)
sage: formula.subs({sin(2*t): t**3 + 2})
t^3 + sin(4*t) + 2
```

And in your expression there are values of R and t so that the result seems to be negative

```
sage: test.subs(R=1,t=1.)
-4.64062057506056
```

But it is not so bad as it seems that all substitutions are actually negative

```
sage: all(test.subs(R=x, t=y) < 0 for x in srange(0.1,2,0.2) for y in srange(0,4,0.2))
True
```

You can easily see that the sign is actually determined by the sub expression which can further be divided by R^2

```
sage: sub_expr = 3*R^6 - 2*(24*cos(t)^4 - 24*cos(t)^2 + 1)*R^4 + 3*R^2
sage: sub_expr2 = (sub_expr / R^2).simplify_rational()
sage: print sub_expr2
3*R^4 - 2*(24*cos(t)^4 - 24*cos(t)^2 + 1)*R^2 + 3
```

To simplify you can replace cos with a new variable u

```
sage: u = SR.var('u')
sage: sub_expr3 = sub_expr2.subs({cos(t): u})
sage: print sub_expr3
3*R^4 - 2*(24*u^4 - 24*u^2 + 1)*R^2 + 3
```

But as you already mentioned this is wrong

```
sage: bool(sub_expr3 >= 0)
False
```

One thing that you need to do is to specify domain of variables

```
sage: assume(R, 'real')
sage: assume(u, 'real')
sage: assume(R > 0)
sage: assume(-1 <= u <= 1)
sage: assumptions()
[R > 0, t is real, R is real, u is real, u >= -1, u <= 1]
```

But still

```
sage: bool(sub_expr3 >= 0)
False
```

But now you sub_expr3 are polynomials of degree 2 (in R^2 and u^2) and you should be able to figure out the sign.

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.