Commit ccaad92
feat: ESO gain optimization with argmin GSS and at_ceiling marker
Add 2nd-order LESO (Linear Extended State Observer) bandwidth optimizer:
- src/eso.rs: golden-section search via argmin over omega_0 ∈ [ESO_OMEGA0_MIN,
min(sample_rate/ESO_OMEGA0_STABILITY_RATIO, ESO_OMEGA0_MAX)]. N-step-ahead
open-loop prediction cost (unimodal: low omega_0 = stale f_hat, high = noise).
b0 auto-estimated via OLS on rate derivatives (QuickFlash method); falls back
to ESO_DEFAULT_B0 when too few high-excitation samples.
at_ceiling: bool set when omega0_opt >= omega0_max_stable - ESO_GSS_TOLERANCE.
- src/plot_functions/plot_eso.rs: stacked time-domain ESO output plot per axis
(omega_meas blue, omega_hat orange, f_hat green scaled to ESO_FHAT_Y_FRACTION).
Legend shows [at ceiling] when optimizer hit its stability-constrained bound.
- src/constants.rs: ESO_OMEGA0_MIN/MAX, GSS_TOLERANCE, GSS_MAX_ITER,
DEFAULT_B0, N_AHEAD_STEPS, WARMUP_FRACTION, B0_* thresholds,
OMEGA0_STABILITY_RATIO, FHAT_Y_FRACTION, COLOR_ESO_*.
- src/main.rs: --eso flag (eso_requested bool); --eso-b0 sets b0 with
eso_b0_user_override; plot_config.run_eso/eso_b0/eso_b0_user_override
applied after arg loop; --eso alone triggers PlotConfig::none() so only
ESO output is generated.
- Cargo.toml/Cargo.lock: add argmin 0.11 dependency.
- OVERVIEW.md: ESO section and TOC entry.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent 0d47da9 commit ccaad92
10 files changed
Lines changed: 835 additions & 11 deletions
File tree
- src
- data_input
- plot_functions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| |||
27 | 28 | | |
28 | 29 | | |
29 | 30 | | |
| 31 | + | |
30 | 32 | | |
31 | 33 | | |
32 | 34 | | |
| |||
163 | 165 | | |
164 | 166 | | |
165 | 167 | | |
166 | | - | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
167 | 186 | | |
168 | 187 | | |
169 | 188 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
273 | 273 | | |
274 | 274 | | |
275 | 275 | | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
276 | 299 | | |
277 | 300 | | |
278 | 301 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
455 | 455 | | |
456 | 456 | | |
457 | 457 | | |
| 458 | + | |
458 | 459 | | |
459 | 460 | | |
460 | 461 | | |
| |||
0 commit comments