Two problems
- Subject: Two problems
- From: Richard Petti <petti at ALLEGHENY.SCRC.Symbolics.COM>
- Date: Thu, 22 Jun 89 13:51:01 -0500
- Apparently-to: mathgroup-out at yoda.ncsa.uiuc.edu
Date: Wed, 21 Jun 89 00:35:34 -0500 From: Dallas_Burtraw at um.cc.umich.edu Greetings. I am in the Economics Dept at Michigan and have been using Mathematica for a little while. Two questions have surfaced that we have not been able to resolve. Can you help? First, I want to attach a penalty in a function within a program, so for example, I always want x > xo. The number x is a real. I want to write ((x - xo)^2)^(.5) - (x - xo) which is 0 for x nonnegative and greater than 0 for x negative. The problem is Mathematica automatically simplifies this algebra. Is there a way to prevent that? I can only suggest how these problems are solved using MACSYMA. Perhaps Mathematica has similar features. MACSYMA is quite careful about assumptions like SQRT(X^2) -> ABS(X), and has a data base for storing facts about symbolic variables. It helps in this case: (C1) F1:SQRT((X-X0)^2)-(X-X0); (D1) ABS(X0 - X) + X0 - X (C2) ASSUME(X-X0 > 0); (D2) [X > X0] (C3) F2:SQRT((X-X0)^2)-(X-X0); (D3) 0 (C4) FORGET(X-X0 > 0); (D4) [X > X0] (C5) F3:SQRT((X-X0)^2)-(X-X0); (D5) ABS(X0 - X) + X0 - X (C6) ASSUME(X-X0 < 0); (D6) [X0 > X] (C7) F4:SQRT((X-X0)^2)-(X-X0); (D7) 2 X0 - 2 X (C8) FORGET(X-X0 < 0); (D8) [X0 > X] The MACSYMA data base can store many other types of properties and use them in calculuations. For example consider the greatest integer function ENTIER: (C16) ENTIER(3/2); (D16) 1 (C17) ENTIER(Y); (D17) ENTIER(Y) (C18) DECLARE(Y,INTEGER); (D18) DONE (C19) ENTIER(Y); (D19) Y ------------------------- The second, more substantial question is the reason the first came up. It seems Mathematica can not use its problem solving techniques, either Solve or FindRoot, over conditional statements. For example, f(x) = x if .... f(x) = x^2 otherwise. Writing such a conditional with If or Which, then FindRoot can not solve because it can not compute the derivatives. Is there a way around this other than calculating maximization conditions separately and then rewriting a new conditional? It seems like an easy fix within the program if it truly is a bug. The real issue on this second question is the construction of a constrained maximization or Lagrangian problem. It seems clumsy, but I have had to solve each f(x) = x, etc. and then test the "if" statement. This wastes time and I lose any numerical value for the Lagrangian weight on the constraint. Do you have suggestions? Regards, Dallas Burtraw Dallas_Burtraw at um.cc.umich.edu MACSYMA's ROOT_BY_BISECTION command handles functions, including compiled user-defined functions. The functions can include logical operations like conditional branching (if-then) statements. Example: (C1) F(X):=IF X > 0 THEN 2*(X-3) ELSE 3*(X-3); (D1) F(X) := IF X > 0 THEN 2 (X - 3) ELSE 3 (X - 3) (C2) COMPILE(F); (D2) [F] (C3) ROOT_BY_BISECTION(F,0.0,10.0); (D3) 3.0 Dick Petti Director, Computer Aided Mathematics Group Symbolics, Inc. email: petti at symbolics.com