Let’s say I have a function like this:

```
T = 10^6
η = 10^9*T^(-3/2)
x = range(-10, 10, step=1)
t = [0, 1, 2, 4]
B_z(x, t) = @. erf(x/sqrt(4*η*t))
```

I wanto differentiate `B_z`

with respect to x and assign it to a new function called `dBdx(x, t)`

. Is there a way to do this?

There are several options. A good starting point is probably

```
T = 10^6
η = 10^9*T^(-3/2)
x = range(-10, 10, step=1)
t = [0, 1, 2, 4]
B_z(x, t) = @. erf(x/sqrt(4*η*t))
dB_zdx(x, t) = ForwardDiff.derivative(B_z(x, t), x)
```

Ok, so I have attempted to set up the derivative as shown here. This does not seem to work as I intended though, because I expect `dB_zdx(5, 0) = 0`

and `dB_zdx(0, 0) = infinity`

but when I run these I have

```
MethodError: objects of type Float64 are not callable
```

Do you know what I may be missing here?

certainly. you need to provide the derivative method with a function of `x`

, i.e.

```
dB_zdx(x, t) = ForwardDiff.derivative(x̃ -> B_z(x̃, t), x)
```

4 Likes