Skip to content

Commit 3d56cef

Browse files
committed
fully updated notebook 2a
1 parent 3c7e453 commit 3d56cef

5 files changed

Lines changed: 222 additions & 390 deletions

File tree

examples/2a_optimizing_parameters_with_dxdt_known.ipynb

Lines changed: 173 additions & 355 deletions
Large diffs are not rendered by default.

examples/2b_optimizing_parameters_with_dxdt_unknown.ipynb

Lines changed: 37 additions & 29 deletions
Large diffs are not rendered by default.

pynumdiff/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
from pynumdiff.linear_model import lineardiff, polydiff, spectraldiff, savgoldiff
1010
from pynumdiff.kalman_smooth import constant_velocity, constant_acceleration, constant_jerk,\
1111
known_dynamics
12+
from pynumdiff.optimize import optimize

pynumdiff/linear_model/_linear_model.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def savgoldiff(x, dt, params=None, options=None, poly_order=None, window_size=No
3939
raise ValueError("`poly_order`, `window_size`, and `smoothing_win` must be given.")
4040

4141
window_size = np.clip(window_size, poly_order + 1, len(x)-1)
42-
if not window_size % 2: window_size += 1 # window_size needs to be odd
42+
if window_size % 2 == 0: window_size += 1 # window_size needs to be odd
4343
smoothing_win = min(smoothing_win, len(x)-1)
4444

4545
dxdt_hat = scipy.signal.savgol_filter(x, window_size, poly_order, deriv=1)/dt
@@ -312,6 +312,9 @@ def _lineardiff(x, dt, order, gamma, solver=None):
312312

313313
if not window_size:
314314
return _lineardiff(x, dt, order, gamma, solver)
315+
elif window_size % 2 == 0:
316+
window_size += 1
317+
warn("Kernel window size should be odd. Added 1 to length.")
315318

316319
kernel = {'gaussian':utility.gaussian_kernel, 'friedrichs':utility.friedrichs_kernel}[kernel](window_size)
317320

pynumdiff/optimize/_optimize.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
'pad_to_zero_dxdt': True,
2121
'high_freq_cutoff': [1e-3, 5e-2, 1e-2, 5e-2, 1e-1]},
2222
{'high_freq_cutoff': (1e-5, 1-1e-5)}),
23-
polydiff: ({'step_size': 1,
23+
polydiff: ({'step_size': [1, 2, 5],
2424
'kernel': 'friedrichs',
2525
'poly_order': [2, 3, 5, 7],
2626
'window_size': [11, 31, 51, 91, 131]},
27-
{'poly_order': (1, 8),
27+
{'step_size': (1, 100),
28+
'poly_order': (1, 8),
2829
'window_size': (10, 1000)}),
2930
savgoldiff: ({'poly_order': [2, 3, 5, 7, 9, 11, 13],
3031
'window_size': [3, 10, 30, 50, 90, 130, 200, 300],
@@ -41,7 +42,8 @@
4142
'order': 3,
4243
'gamma': [1e-1, 1, 10, 100],
4344
'window_size': [10, 30, 50, 90, 130]},
44-
{'gamma': (1e-3, 1000),
45+
{'order': (1, 5),
46+
'gamma': (1e-3, 1000),
4547
'window_size': (15, 1000)}),
4648
first_order: ({'num_iterations': [5, 10, 30, 50]},
4749
{'num_iterations': (1, 1000)}),
@@ -130,8 +132,8 @@ def optimize(func, x, dt, search_space={}, dxdt_truth=None, tvgamma=1e-2, paddin
130132
structured as :code:`{param1:[values], param2:[values], param3:value, ...}`. The search space
131133
is the Cartesian product. If left None, a default search space of initial values is used.
132134
:param np.array[float] dxdt_truth: actual time series of the derivative of x, if known
133-
:param float tvgamma: regularization value used to select for parameters that yield a smooth derivative.
134-
Larger value results in a smoother derivative
135+
:param float tvgamma: Only used if :code:`dxdt_truth` is given. Regularization value used to select for parameters
136+
that yield a smooth derivative. Larger value results in a smoother derivative.
135137
:param int padding: number of time steps to ignore at the beginning and end of the time series in the
136138
optimization. Larger value causes the optimization to emphasize the accuracy of dxdt in the
137139
middle of the time series

0 commit comments

Comments
 (0)