Comparison with Finite Differences¶
finitediff
¶
Finite difference approximation of parametric derivatives.
Warning
Finite difference approximations are typically computationally expensive and inaccurate. They should only be used for comparison in small test cases.
Functions:
Name | Description |
---|---|
finite_diff_1_forward |
Forward finite difference approximation of a first order derivative |
finite_diff_1_backward |
Backward finite difference approximation of a first order derivative |
finite_diff_1_central |
Central finite difference approximation of a first order derivative |
finite_diff_2 |
Implement second order finite differences |
compute_fd_jacobian |
Compute the Jacobian of the Eikonal equation w.r.t. to parameter with finite differences |
eikonax.finitediff.finite_diff_1_forward
¶
finite_diff_1_forward(func: Callable[[jtReal[npt.NDArray, M]], jtReal[npt.NDArray, M]], eval_point: jtReal[npt.NDArray, M], step_width: Real, index: int) -> jtReal[npt.NDArray, N]
Forward finite difference approximation of a first order derivative.
This method expects vector-valued functions \(f: \mathbb{R}^M \to \mathbb{R}^N\), and approximates the first derivative of \(f\) at a given point \(x \in \mathbb{R}^M\) with respect to the \(i\)-th component of \(x\) as
with a step width \(h>0\).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
func
|
Callable
|
Callable to use for FD computation |
required |
eval_point
|
npt.NDArray
|
Parameter value at which to approximate the derivative |
required |
step_width
|
Real
|
Step width of the finite difference |
required |
index
|
int
|
Vector component for which to compute partial derivative |
required |
Returns:
Type | Description |
---|---|
jtReal[npt.NDArray, N]
|
npt.NDArray: Partial derivative approximation |
eikonax.finitediff.finite_diff_1_backward
¶
finite_diff_1_backward(func: Callable[[jtReal[npt.NDArray, M]], jtReal[npt.NDArray, M]], eval_point: jtReal[npt.NDArray, M], step_width: float, index: int) -> jtReal[npt.NDArray, N]
Backward finite difference approximation of a first order derivative.
This method expects vector-valued functions \(f: \mathbb{R}^M \to \mathbb{R}^N\), and approximates the first derivative of \(f\) at a given point \(x \in \mathbb{R}^M\) with respect to the \(i\)-th component of \(x\) as
with a step width \(h>0\).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
func
|
Callable
|
Callable to use for FD computation |
required |
eval_point
|
npt.NDArray
|
Parameter value at which to approximate the derivative |
required |
step_width
|
Real
|
Step width of the finite difference |
required |
index
|
int
|
Vector component for which to compute partial derivative |
required |
Returns:
Type | Description |
---|---|
jtReal[npt.NDArray, N]
|
npt.NDArray: Partial derivative approximation |
eikonax.finitediff.finite_diff_1_central
¶
finite_diff_1_central(func: Callable[[jtReal[npt.NDArray, M]], jtReal[npt.NDArray, M]], eval_point: jtReal[npt.NDArray, M], step_width: float, index: int) -> jtReal[npt.NDArray, N]
Central finite difference approximation of a first order derivative.
This method expects vector-valued functions \(f: \mathbb{R}^M \to \mathbb{R}^N\), and approximates the first derivative of \(f\) at a given point \(x \in \mathbb{R}^M\) with respect to the \(i\)-th component of \(x\) as
with a step width \(h>0\).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
func
|
Callable
|
Callable to use for FD computation |
required |
eval_point
|
npt.NDArray
|
Parameter value at which to approximate the derivative |
required |
step_width
|
Real
|
Step width of the finite difference |
required |
index
|
int
|
Vector component for which to compute partial derivative |
required |
Returns:
Type | Description |
---|---|
jtReal[npt.NDArray, N]
|
npt.NDArray: Partial derivative approximation |
eikonax.finitediff.finite_diff_2
¶
finite_diff_2(func: Callable[[jtReal[npt.NDArray, M]], jtReal[npt.NDArray, M]], eval_point: jtReal[npt.NDArray, M], step_width: float, index_1: int, index_2: int) -> None
Implement second order finite differences.
Not implemented yet
eikonax.finitediff.run_eikonax_with_tensorfield
¶
run_eikonax_with_tensorfield(parameter_vector: jtReal[npt.NDArray, M], eikonax_solver: solver.Solver, tensor_field: tensorfield.TensorField) -> jtReal[npt.NDArray, N]
Wrapper function for Eikonax runs.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
parameter_vector
|
npt.NDArray
|
Parameter vector at which to compute eikonal solution |
required |
eikonax_solver
|
solver.Solver
|
Initialized solver object |
required |
tensor_field
|
tensorfield.TensorField
|
Initialized tensor field object |
required |
Returns:
Type | Description |
---|---|
jtReal[npt.NDArray, N]
|
npt.NDArray: Solution of the Eikonal equation |
eikonax.finitediff.compute_fd_jacobian
¶
compute_fd_jacobian(eikonax_solver: solver.Solver, tensor_field: tensorfield.TensorField, stencil: Callable, eval_point: jtReal[npt.NDArray | jax.Array, M], step_width: float) -> jtReal[npt.NDArray, 'N M']
Finite Difference Jacobian.
Compute the Jacobian of the discrete Eikonal equation solution \(\mathbf{u}\in\mathbb{R}^N\) w.r.t. to a parameter vector \(\mathbf{m}\in\mathbb{R}^M\) with finite differences.
Warning
This method should only be used for small problems.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
eikonax_solver
|
solver.Solver
|
Initialized solver object |
required |
tensor_field
|
tensorfield.TensorField
|
Initialized tensor field object |
required |
stencil
|
Callable
|
Finite difference stencil to use for computation |
required |
eval_point
|
npt.NDArray
|
Parameter vector at which to approximate derivative |
required |
step_width
|
float
|
Step with in FD stencil |
required |
Returns:
Type | Description |
---|---|
jtReal[npt.NDArray, 'N M']
|
npt.NDArray: (Dense) Jacobian matrix |
eikonax.finitediff.compute_fd_hessian
¶
compute_fd_hessian(func: Callable, stencil: Callable, eval_point: jtReal[npt.NDArray | jax.Array, M], step_width: float) -> None
Implement finite difference Hessian computation.
Not implemented yet