# SNESObjectiveComputeFunctionDefaultFD
Computes the gradient of a user provided objective function 
## Synopsis
```
PetscErrorCode SNESObjectiveComputeFunctionDefaultFD(SNES snes, Vec X, Vec F, void *ctx)
```
Collective


## Input Parameters

- ***snes -*** the `SNES` context
- ***X    -*** the state vector
- ***ctx  -*** the (ignored) function context



## Output Parameter

- ***F   -*** the function value



## Options Database Keys

- ***-snes_fd_function_eps -*** Tolerance for including non-zero entries into the gradient, default is 1.e-6
- ***-snes_fd_function -*** Computes function from user provided objective function (set with `SNESSetObjective()`) with finite difference



## Notes
This function can be used with `SNESSetFunction()` to have the nonlinear function solved for with `SNES` defined by the gradient of an objective function
`SNESObjectiveComputeFunctionDefaultFD()` is similar in character to `SNESComputeJacobianDefault()`.
Therefore, it should be used for debugging purposes only.  Using it in conjunction with
`SNESComputeJacobianDefault()` is excessively costly and produces a Jacobian that is quite
noisy.  This is often necessary, but should be done with care, even when debugging
small problems.

Note that this uses quadratic interpolation of the objective to form each value in the function.




## See Also
 `SNESSetObjective()`, `SNESSetFunction()`, `SNESComputeObjective()`, `SNESComputeJacobianDefault()`

## Level
advanced

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/interface/snesob.c.html#SNESObjectiveComputeFunctionDefaultFD">src/snes/interface/snesob.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/snes/interface/snesob.c)


[Index of all SNES routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
