       Re: Derivatives of numerical functions : how does mathematica work?

• To: mathgroup at smc.vnet.net
• Subject: [mg61477] Re: Derivatives of numerical functions : how does mathematica work?
• From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
• Date: Wed, 19 Oct 2005 23:07:27 -0400 (EDT)
• Organization: Uni Leipzig
• References: <dj4q04\$ior\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Hi,

<< NumericalMath`NLimit`

myfun[c_?NumericQ] := y /. FindRoot[(x + y) /.
{x -> c}, {y, 0}]

ND[myfun[c], c, 2.0]

Regards

Jens

<amitgandhi at gmail.com> schrieb im Newsbeitrag
news:dj4q04\$ior\$1 at smc.vnet.net...
|I have stumbled upon a seemingly basic problem -
but my inability to
| understand why I cannot get mathematica to work
in the way I think it
| should makes me question how well I understand
the foundtaions of
| mathematica.
|
| Essentially I have a functions f[x] which takes
x, and forms a system
| of equations in the variables y1,...,yn where x
appears as a parameter
| to the system, and it uses FindRoot to solve for
y1,...,yn and then
| outputs the sum y1+...,yn. I know the solutions
for y1,...,yn are
| "smooth" in the parameter x, and thus I was
interested  in finding the
| numerical derivative of y1+...+yn with respect
to the parameter x.
| However I cannot get mathematica to implement
this - I can illustrate
| the difficulty in a very basic setting (excuse
the fact that I can do
| this "toy" problem analytically, because my real
problem requires
| numerics).
|
| Suppose we have the equation
|
| equ=x+y
|
| For a particular value of x, I can solve the
equation x+y=0 for y,
| which for x=2.0 I do in mathematica as follows:
|
| y /. FindRoot[x + y /. {x -> 2.0}, {y, 0}]
|
|
| which yields the obvious -2.
|
| Now I want to consider the above mathematica
expression, which solves
| for the value of y for a given x, as an
expression that is variable in
| x, and I wish to cconsider how the value of this
expression varies with
| x, i.e., the numerical derivative with respect
to x. My inutuition for
| mathematica suggests that I should write this as
|
| <<NumericalMath`NLimit`
| ND[y /. FindRoot[(x + y) /. {x -> c}, {y, 0}],
c, 2.0]
|
| However the output from entering this expression
is a number of error
| messages that read, the most important and
telling one being that :
|
| "The function value {0. + c} is not a list of
numbers with \
| dimensions {1} at {y} = {0.`}."
|
| Why is this happening - doesn't ND try to
replace c with a trial value
| in the expression in the first argument of ND
before it tries
| evaluating the expression?
|
| However after the error messages finish, the ND
command manages to
| produce the right answer, namely -1.
|
| ND is just an example of this phenomena - the
same thing would have
| happened had I tried to use NLimit, FindMinumum,
FindRoot, or a host of
| other mathematica functions with the expression
I defined above. Can
| anyone explain how to get mathematica to work
"error free" for a
| problem like this, and whether the numerical
| produces should be trusted after producing a
long list of errors.
|
|
| Thanks
| Amit
|

```

• Prev by Date: Re: Exporting XML as DocBook, etc
• Next by Date: Re: Compile nested loops with depending index variables...
• Previous by thread: Derivatives of numerical functions : how does mathematica work?
• Next by thread: Window names in Mathematica under Linux/KDE