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 answer that mathematica | produces should be trusted after producing a long list of errors. | | | Thanks | Amit |