I have a function with parameters as a keyword argument, say:

```
f(x;p = [1,2,1]) = p[1]*x^2 + p[2]*x + p[3]
```

How do I compute the gradient g(x,p) = \frac{\partial f(x;p)}{\partial p}?

I have a function with parameters as a keyword argument, say:

```
f(x;p = [1,2,1]) = p[1]*x^2 + p[2]*x + p[3]
```

How do I compute the gradient g(x,p) = \frac{\partial f(x;p)}{\partial p}?

make a closure `p -> f(x; p=p)`

and differentiate that (for some given x).

1 Like

Thanks. Does that mean that I need to define this anonymous function each time I change `x`

? (In MATLAB, I would need to do that, as far as I recall.)

In other words, do I need to specify a numeric value for `x`

before I make the closure you suggest?

A simple test case:

```
julia> using ForwardDiff;
julia> f(x;p=[1,2,1]) = p[1]*x^2 + p[2]*x + p[3];
julia> h = p -> f(x;p=p)
julia> g = p -> ForwardDiff.gradient(h,p)
julia> x = 3;
julia> g([1,2,3.])
3-element Array{Float64,1}:
9.0
3.0
1.0
julia> x = 4;
julia> g([1,2,3])
3-element Array{Int64,1}:
16
4
1
```

Nice!

1 Like