Re: if-expression and variables
"William Sit" <[email protected]> Tue, 14 Jun 2011 02:26:20 -0400
| Newsgroups | gmane.comp.mathematics.axiom.general |
|---|---|
| Message-ID | <[email protected]> |
In Axiom, we can implement a characteristic function for a given set, in the category of sets, which would avoid division by zero. This can take care of the provisos. If I am not mistaken, the step(a,b,x) is the characteristic function for the interval set [a,b], but the implementation below, as pointed out, may cause division by zero. We can use "if-then-else" to implement it instead. William On Fri, 10 Jun 2011 19:56:18 +0200 Stefan Karrmann <[email protected]> wrote: > Dear all, > > we can help ourselves in some cases by: > > sign x == (abs x)/x > H x == (1 + sign x)/2 > step (a,b,x) == (H(x-a)) * (H(b-x)) > > The drawback is that we get a 'Division by zero'. > > Kind regards, > Stefan > > Am Donnerstag, den 05.05.2011, 00:23 -0400 schrieb >William Sit: >> Dear Stefan: >> >> You posed a legitimate problem: how should symbolic >> computation handle piecewise defined functions, and in >> particular, how to integrate such a function. >> >> Maple and Mathematica both can handle piecewise >>functions. >> Look up "piecewise" from Maple Help. You can easily >>define >> a piecewise function, and differentiate or integrate it. >> Indeed, Maple says: >> >> The piecewise function can be differentiated, >>integrated, >> simplified, plotted, and used in the following types of >> differential equations: constant coefficients and >> discontinuous perturbation function, general first-order >> linear, Riccati, and some other classes which are >>handled >> by integration or variation of parameter. See >> dsolve[piecewise] for more details. series, limit, abs, >> and signum can handle the piecewise function. >> >> As example, the desired solution the problem of >> integrating f(x) from 0 to t, where f(x) is 2x if x < 10 >> and 5x^2 otherwise, should be the function g(t), defined >> as t^2 if t < 10 and -4000/3 +(5 t^3)/3 otherwise. Maple >> does exactly that. In fact, I even tried to integrate >> f(f(x)) and f(f(x+1)) and Maple does it with no problems >> with all the cases covered. >> >> Mathematica has a similar function called Piecewise to >> construct piecewise functions, and like Maple, Piecewise >> can be used in such functions as Integrate, Minimize, >> Reduce, DSolve and Simplify, as well as their numeric >> analogs. >> >> This may be an uncovered domain in Axiom. A search for >> "piecewise" shows no hits. I think piecewise functions >> have to be separately handled, particularly in case >> analysis (possibly involving semi-algebraic sets and >>CAD) >> if there is any indefiniteness in the answer (like an >> indefinite integral). There is some evidence that if the >> user does not use the built-in "piecewise" or >>"Piecewise" >> function, but uses an if-then-else construction, neither >> Maple nor Mathematica can handle subsequent mathematical >> calculations. For example, the system would not do the >> case analysis, much less the "simplification" >> automatically, but would present the result as the >> integral of If[x < 10, 2 x, 5 x^2] (in Mathematica; I >>did >> not try Maple). Even when the case analysis is done, it >> would still not simplify or evaluate the integrals: >> >> h[x_] := If[x < 10, Integrate[2 y, {y, 0, x}], >> Integrate[2 y, {y, 0, 10}] + Integrate[5 y^2, {y, 10, >> x}]] >> >> when h[x] is called. It will evaluate on numerical >>inputs. >> >> In our earlier discussions, we were "lured" into using >> "if-the-else" constructions and thus got the feeling >>that >> this is difficult to handle. The confusion is that we >> interpret "x < 10" as an binary relation, whereas it >> should be handled as a semi-algebraic set (in one >> dimension, this is just an interval)! >> >> However, the algorithms seem to be there, and someone >> should implement them in Axiom if it is not already done >> but hidden in some obscure packages. >> >> William >> >> On Wed, 04 May 2011 22:37:48 +0200 >> Stefan Karrmann <[email protected]> wrote: >> > Dear all, >> > >> > thanks for your answers. They clears a lot. >> > >> > I actually want to integrate test1 and solve an >> >differential equation >> > with it. >> > >> > E.g. >> > test2 x == rho * test1 x >> > y = operator 'y >> > odeq := D(y x) = test2 x >> > solve(odeq, y, x) >> > >> > Obviously, the solution is "formally" >> > >> > y_sol x == integrate(test2 x,x) >> > >> > Kind regards, >> > Stefan >> > >> > Am Dienstag, den 03.05.2011, 11:21 +0200 schrieb Ralf >> >Hemmecke: >> >> Dear Stefan, >> >> >> >> as others already have pointed out, for Axiom, your >> >>question is not >> >> really well posed. >> >> >> >> In Axiom >> >> >> >> if x<10 then 2*x else 5*x^2 >> >> >> >> is *not* an expression (as you might know it from >>other >> >>untyped CAS like >> >> Mathematica or Maple), but rather a programming >>language >> >>construct. In >> >> other words, if Axiom sees this, it is evaluated. So >>the >> >>result is >> >> either 2*x or 5*x^2 depending on the (boolean) >>outcome >> >>of the evaluation >> >> of x<10. >> >> >> >> I think, Bill suggested to use something like >>InputForm. >> >>There it would >> >> be possible to represent an if-expression >>unevaluated. >> >> >> >> But you should rather say what you actually want >>(it's >> >>not the same what >> >> you expect). >> >> >> >> In order for us to suggest you a proper way to handle >> >>your use case, you >> >> should tell us why you want a piecewise function and >> >>(more important) >> >> what you later want to do with that function. >> >> >> >> Until we have that information, everything would be >>just >> >>digging in the >> >> dark. >> >> >> >> Ralf >> >> >> >> On 04/30/2011 08:40 PM, Stefan Karrmann wrote: >> >> > Dear all, >> >> > >> >> > I'm new to axiom and have a problem with piecewise >> >>functions. >> >> > >> >> > test1 (x | x< 10) == 2*x >> >> > test1 (x | x >= 10) == 5*x^2 >> >> > [was typo: test1 (x | x< 10) == 5*x^2] >> >> > test1 >> >> > -> >> >> > test1 (x | x< 10) == 2x >> >> > test1 (x | ^ x< 10) == 5x >> >> > >> >> >> Type: >> >>FunctionCalled >> >> > test1 y >> >> > -> >> >> > 2 >> >> > 5y >> >> > >> >> > I expected something like (if y< 10 then 2*y else >> >>5*y**2). >> >> > >> >> > How is it possible to pass a Variable to a >>piecewise >> >>function respecting >> >> > the pieces? >> >> > >> >> > PS: Using a block and => or explicit if-then-else >> >>does not help. >> > >> > >> > _______________________________________________ >> > Axiom-math mailing list >> > [email protected] >> > https://lists.nongnu.org/mailman/listinfo/axiom-math >> >> William Sit, Professor Emeritus >> Mathematics, City College of New York >> Office: R6/291D Tel: 212-650-5179 >> Home Page: http://scisun.sci.ccny.cuny.edu/~wyscc/ > > William Sit, Professor Emeritus Mathematics, City College of New York Office: R6/291D Tel: 212-650-5179 Home Page: http://scisun.sci.ccny.cuny.edu/~wyscc/