# ForwardDiff on keyword argument?

**URL:** <https://discourse.julialang.org/t/forwarddiff-on-keyword-argument/29733>\
**Category:** General Usage\
**Created:** [October 10, 2019, 3:15pm UTC](https://discourse.julialang.org/t/forwarddiff-on-keyword-argument/29733 "2019-10-10T15:15:31Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![BLI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bli/32/37206_2.png) [@BLI](https://discourse.julialang.org/u/BLI)\
**Post date:** [October 10, 2019, 3:15pm UTC](https://discourse.julialang.org/t/forwarddiff-on-keyword-argument/29733/1 "2019-10-10T15:15:31Z")

</div>

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

```julia
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}?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [October 10, 2019, 6:29pm UTC](https://discourse.julialang.org/t/forwarddiff-on-keyword-argument/29733/2 "2019-10-10T18:29:38Z")

</div>

make a closure `p -> f(x; p=p)` and differentiate that (for some given x).

---

<div class="post-metadata">

**Author:** ![BLI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bli/32/37206_2.png) [@BLI](https://discourse.julialang.org/u/BLI)\
**Post date:** [October 10, 2019, 7:01pm UTC](https://discourse.julialang.org/t/forwarddiff-on-keyword-argument/29733/3 "2019-10-10T19:01:05Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![BLI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bli/32/37206_2.png) [@BLI](https://discourse.julialang.org/u/BLI)\
**Post date:** [October 10, 2019, 7:29pm UTC](https://discourse.julialang.org/t/forwarddiff-on-keyword-argument/29733/4 "2019-10-10T19:29:50Z")

</div>

A simple test case:

```julia
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!
