Is there some way to tell maxima that an expression is always positive? Here is an example snippet that causes maxima to ask the question for the expression sin(a)*x
:
declare([a,x,y],real); ca: cos(a) = (x / (sqrt(x*x + y*y))); a1: solve(ca,a)[1]; solve(a1,y);
You can use assume
. From Maxima's own documentation:
-- Function: assume (, ..., ) Adds predicates , ..., to the current context. If a predicate is inconsistent or redundant with the predicates in the current context, it is not added to the context. The context accumulates predicates from each call to `assume'. `assume' returns a list whose elements are the predicates added to the context or the atoms `redundant' or `inconsistent' where applicable. The predicates , ..., can only be expressions with the relational operators `=' and `>'. Predicates cannot be literal equality `=' or literal inequality `#' expressions, nor can they be predicate functions such as `integerp'. Compound predicates of the form ` and ... and ' are recognized, but not ` or ... or '. `not ' is recognized if is a relational predicate. Expressions of the form `not ( and )' and `not ( or )' are not recognized. Maxima's deduction mechanism is not very strong; there are many obvious consequences which cannot be determined by `is'. This is a known weakness. `assume' evaluates its arguments. See also `is', `facts', `forget', `context', and `declare'.
Examples:
(%i1) assume (xx > 0, yy < -1, zz >= 0);
(%o1) [xx > 0, yy < - 1, zz >= 0]
(%i2) assume (aa < bb and bb < cc);
(%o2) [bb > aa, cc > bb]
(%i3) facts ();
(%o3) [xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb]
(%i4) is (xx > yy);
(%o4) true
(%i5) is (yy < -yy);
(%o5) true
(%i6) is (sinh (bb - aa) > 0);
(%o6) true
(%i7) forget (bb > aa);
(%o7) [bb > aa]
(%i8) prederror : false;
(%o8) false
(%i9) is (sinh (bb - aa) > 0);
(%o9) unknown
(%i10) is (bb^2 < cc^2);
(%o10) unknown
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With