# scipy – Difference between Sympy and Numpy solvers

## scipy – Difference between Sympy and Numpy solvers

In numpy version function `G(array([pi/4]))`

returns an empty array:

```
>> G(array([pi/4]))
array([], dtype=float64)
```

The problem is in line:

```
return diff(F(theta,phi,phi0,H0),phi)
```

`numpy.diff`

calculates differences between consecutive element of the arrays, whereas `sympy.diff`

calculates a derivative. You can modify your own `F_phi`

function to return derivative calculated analytically (if you know the solution) or numerically. For numerical solution you can use:

```
def F_phi(theta,phi,phi0,H0, eps=1e-12):
return (F(theta,phi+eps,phi0,H0) - F(theta,phi,phi0,H0))/eps
```

and analytical solution (calculated with `sympy`

):

```
def F_phi(theta, phi, phi0, H0):
return -H0*a*t*(-sin(phi)*sin(phi0)*sin(theta) - sin(phi)*sin(theta)*cos(phi0)) + 4*t*sin(2*phi)*sin(theta)**4*cos(2*phi)
```

Please remember that numerical solution wont be as precise as analytical. Therefore, there might be still differences between sympy (analytical) and numpy (numerical) approaches.