MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Problem with user defined functions

Farhat Habib wrote:
> Hello all,
> I am trying to evalute a function which looks like this. This is an
> analogous problem not the actual problem.
> test[x_] := p /. FindRoot[Sin[p] == x, {p, 1}][[1]]
> data[x_] := D[test[x], x]
> Plot[data[x], {x, 0, 1}]
> Now, when trying to evaluate the derivative mathematica replaces both the
> x's with the number at which it is trying to calculate the datapoint. This
> gives an error of 'xxxx is not a valid variable'. Replacing D[test[x]]
> with test'[x] doesn't help either though it results in a different set of
> errors. Is there any of way of getting around this problem?
> Thanks in advance,
> Farhat

In addition to the ways noted in sci.math.symbolic (differentiate
numerically or form an interpolating function) I can think of one method
that in essence reduces the plotting of the derivative to use the same
computation as for evaluating the function itself. Like the other
methods, this one will not make use of the fact that your particular
example has a readily available inverse function.

I'll show this using more customary notation {x,y}. We regard y as an
implicitly defined function of x.

expr[x_] = Sin[y]-x

We form the derivative with respect to x. We will use this to solve for
y'[x] in terms of x and y[x].

derivexpr = D[expr[x]/.y->y[x], x]

Now we give a function to evaluate y[x] numerically.

evaly[x_?NumberQ] := y /. FindRoot[expr[x]==0, {y,1}]

We use all this to find an expression that will evaluate the derivative
numerically. We solve for y'[x] and then replace y[x] in the solution by

In[8]:= evaldydx = (First[y'[x] /. Solve[derivexpr==0, y'[x]]]) /.
Out[8]= Sec[evaly[x]]

This may now be plotted via

Plot[evaldydx, {x,0,1}]

Daniel Lichtblau
Wolfram Research

  • Prev by Date: Re: Re: Poincare sections
  • Next by Date: Re: Pascal's Triangle
  • Previous by thread: Re: Problem with user defined functions
  • Next by thread: Re: Problem with user defined functions