From 28b7726393faf63455a8a4e959b69d37f90570df Mon Sep 17 00:00:00 2001 From: Spencer Lee Date: Fri, 29 Mar 2024 00:49:00 -0400 Subject: [PATCH] Added finite difference control gradient calculation, for testing --- src/Controls/Control.jl | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Controls/Control.jl b/src/Controls/Control.jl index 98d410f..9390370 100644 --- a/src/Controls/Control.jl +++ b/src/Controls/Control.jl @@ -291,3 +291,18 @@ function eval_q_single(controls, t, pcof, control_index) local_pcof = get_control_vector_slice(pcof, controls, control_index) return eval_q(local_control, t, local_pcof) end + +function eval_grad_p_derivative_fin_diff(control::AbstractControl, t::Real, + pcof::AbstractVector{<: Real}, order::Int64) + pcof_copy = copy(pcof) + grad = zeros(length(pcof)) + for i in 1:length(pcof) + pcof_copy .= pcof + pcof_copy[i] += 1e-5 + pval_r = eval_p_derivative(control, t, pcof_copy, order) + pcof_copy[i] -= 2e-5 + pval_l = eval_p_derivative(control, t, pcof_copy, order) + grad[i] = (pval_r - pval_l)/2e-5 + end + return grad +end