There's currently no code that allows the user to calculate how sensitive the period and amplitude are to small perturbations in parameters. The goal is to have a couple of functions that can take in the result of find_oscillations(), perform perturbations on those parameter sets, and calculate how much period and amplitude have changed.
The functionality can be modularized in the following steps:
Choose how parameters are going to be perturbed
Create the "perturbed" set of parameters
Simulate the perturbed set. This means equilibrating, simulating, checking that the result oscillates, and calculating the features of those oscillations
Compare original and perturbed set
There are a couple of ways to implement the perturbations:
The user selects which specific parameter to change, and all parameter sets are perturbed equally
The function randomly selects one parameter for each parameter set and perturbs it randomly
The user selects which parameters are perturbed for each parameter set
We could create specific functions for each one of these perturbation modes. Probably the best to start with is the random selection of parameters.
There's currently no code that allows the user to calculate how sensitive the period and amplitude are to small perturbations in parameters. The goal is to have a couple of functions that can take in the result of
find_oscillations()
, perform perturbations on those parameter sets, and calculate how much period and amplitude have changed.The functionality can be modularized in the following steps:
There are a couple of ways to implement the perturbations:
We could create specific functions for each one of these perturbation modes. Probably the best to start with is the random selection of parameters.
Therefore, we need the following functions:
create_random_parameter_set_perturbation(parameter_sets::AbstractArray, perturbation_percentage::Real, random_seed::Int)
simulate_pin_parameter_perturbations(find_oscillation_result::Dict, perturbation_percentage::Real; hyperparameters=DEFAULT_PIN_HYPERPARAMETERS)
process_perturbation_results(find_oscillations_result::Dict, perturbation_result::Dict)