[Date Index] [Thread Index] [Author Index]
Re: Failure to Evaluate?
On 3 Aug 2004, at 07:11, Scott Guthery wrote: > > f:=Function[#1^2/#1+1] > > g:=Function[#1^4+7] > > h:=D[f]/D[g] > > h > > Gives > > ((#1^2/#1)+1 &)/(#1^4+7 &) > > Why doesn't it evaluate by setting #1 to 1 to get 1/4? > > h/.#1->1//N sets #1 to 1 and gives > > (1 1 + 1 &)/(1 + 7 &) > > but still doesn't evaluate to 1/4. > > What gives? What's the Right Stuff? > > Thanks for any insight. > > Cheers, Scott > > Mathematica does not implement the algebra of functions so if f an g are a functions, f+g, f*g, and f/g are not. Also, your definition, f=Function[#1^2/#1+1] seems pointless, since this is just Function[#1+1]. Did you mean f=Function[#1^2/(#1+1)]? In addition, there is no point using delayed evaluation in the definitions of f, g and h; the only thing it does is make you code slightly slower. And another thing: what do you think D[f] and D[g] are? Well, whatever you intended they just return f and g. Presumably what you meant was f' and g' (Derivative[f],Derivative[g])? Anyway, there are two ways to deal with this. One is to unprotected Plus, Times, and Power and overload them to work with functions. I showed how to do this in this list several years ago but it is pretty obvious so I do not want to repeat it. Besides, I do not recommend this approach. A simpler way is simply this: f = #1 + 1 & ; g = #1^4 + 7 & ; h = Function[x, Derivative[f][x]/Derivative[g][x]]; h 1/4 Andrzej Kozlowski Chiba, Japan http://www.mimuw.edu.pl/~akoz/