A wealth of knowledge is on display in MaplePrimes as our contributors share their expertise and step up to answer others’ queries. This post picks out one such response and further elucidates the answers to the posted question. I hope these explanations appeal to those of our readers who might not be familiar with the techniques embedded in the original responses.
Before I begin, a quick note that the content below was primarily created by one of our summer interns, Pia, with guidance and advice from me.
MaplePrimes member Thomas Dean wanted 1/2*x^(1/2) + 1/13*x^(1/3) + 1/26*x^(45/37) to become 0.5*x^0.500000 + 0.07692307692*x^0.333333 + 0.03846153846*x^1.216216216 using the evalf command.
Here you can see the piece of code that Thomas Dean wrote in Maple:
eq:=1/2*x^(1/2) + 1/13*x^(1/3) + 1/26*x^(45/37);
Carl Love replied simply and effectively with a piece of code, using the evalindets command instead:
evalindets(eq, fraction, evalf);
As always, Love provided an accurate response, and it is absolutely correct. But for those just learning Maple, I wanted to provide some additional explanation.
The evalindets command, evalindets( expr, atype, transformer, rest ), is a particular combination of calls to eval and indets that allows you to efficiently transform all subexpressions of a given type by some algorithm. It encapsulates a common "pattern" used in expression manipulation and transformation.
Each subexpression of type atype is transformed by the supplied transformer procedure. Then, each subexpression is replaced in the original expression, using eval, with the corresponding transformed expression.
Note: the parameter restis an optional expression sequence of extra arguments to be passed to transformer. In this example it was not used.
I hope that you find this useful. If there is a particular question on MaplePrimes that you would like further explained, please let me know.