Re: Numerical derivatives of compiled functions

• To: mathgroup at smc.vnet.net
• Subject: [mg32873] Re: Numerical derivatives of compiled functions
• From: Thomas Anderson <tga at stanford.edu>
• Date: Sat, 16 Feb 2002 04:35:36 -0500 (EST)
• Organization: Stanford University
• References: <a4if7p\$9on\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```It has always bothered me that ND[] does not hold the function argument
when it constructs the symbolic expression for the derivative prior to
evaluation. One way to get around this problem is to define a "wrapper"
function that is defined only for real numbers:

In:  f = Compile[x, ...];

In:  F[x_Real] := f[x]

In:  ND[F[x], ...]

This tactic works well for me.

-Tom

In article <a4if7p\$9on\$1 at smc.vnet.net>, Kyriakos Chourdakis
<k.chourdakis at qmul.ac.uk> wrote:

> Dear all,
>
> I have a compiled function and want to find the Hessian matrix numerically
> at a specific point. The function ND[] does not work even in simple cases
> like:
>
> In:  cf = Compile[{x, y}, Module[{a = 3}, Print[x, " ", y]; a x^a y]]
>
> Out: CompiledFunction[{x, y},Module[{a = 3}, Print[x, " ", y]; a x^a y],
> -CompiledCode-]
>
>
> In:  ND[cf[q, 4], q, 2]
>
>      CompiledFunction::"cfsa": "Argument q at position 1 should be a
> machine-size real number.
>      q 4
> Out: 144.
>
> My guess is that ND[] tries to evaluate the function symbolically first. In
> my problem I have the product/sum of over 10000 primitive functions, and
> symbolic computations for all second-order derivs will take for ever.
>
> When plotting is concerned, I suppose that the option Compiled does the
> trick. How would that work with ND[]?
>
> Cheers,
>
> Kyriakos

```

• Prev by Date: RE: A Learning TableForm Problem