Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stop maxima from asking positive, negative or zero

Tags:

maxima

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);
like image 663
Willem Avatar asked Jan 12 '13 07:01

Willem


1 Answers

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
like image 161
John Dvorak Avatar answered Oct 21 '22 14:10

John Dvorak