Re: Q. How to work with derivative?
- To: mathgroup at smc.vnet.net
- Subject: [mg6664] Re: [mg6615] Q. How to work with derivative?
- From: seanross at worldnet.att.net
- Date: Wed, 9 Apr 1997 09:15:05 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Yaroslaw Bazaliy wrote: > > If any one has any experience with the following, could you please > help? > > Suppose I have a function f[x], say f[x]=x^3. Then I want to calculate > the derivative of say Log[f[x]] and evaluate it at some point, say x=3. > I try: > -------------------------------------- > Clear[f,s]; > f[x_]:=x^3; > s[x_]:=D[Log[f[x]],x]; > s[3] > General::"ivar": "\!\(3\) is not a valid variable." > Out[47]= > \!\(\[PartialD]\_3 Log[27]\) > ------------------------------------- > Try onother approach: > ------------------------------------------------ > Clear[f]; > f[x_]:=x^3; > Function[x,D[Log[f[x]],x]][3] > General::"ivar": "\!\(3\) is not a valid variable." > Out[48]= > \!\(\[PartialD]\_3 Log[27]\) > ------------------------------------------------ > Both times my "3" goes into the notation for derivative, so > it appears as if I want to differentiate with respect to "3". > > Of course I can do > ----------------------------------------------- > Clear[f]; > f[x_]:=x^3; > D[Log[f[x]],x]/.x->3 > > Out[]= > 1 > ----------------------------------------------- > and get the result, but I need a _function_ (which I can later > plot for instanse). What is the possible way to do it along the lines > of my first approach? > > Thank you for all suggestions, > Yaroslaw. Usually mathematica gets confused with such notation as: f[x_]=D[g[x],x]; It thinks all the x's are the same symbol whereas you, the user, clearly see that the x's in the derivative are "dummy" variabls and the x_ is a discrete point. To get around this, try something like: f[x_]=Evaluate[D[g[a],a]]/.a->x; Under certain conditions, you may even need to do this in two lines using a holder symbol like: holder=D[g[a],a]; f[x_]=holder/.a->x; I also notice that your examples all used the delayed equals :=. If something that makes sense to you doesn't work, it is always a good idea to experiment around with the immediate equals =. In this case, you want immediate equals.