Skip to content

Validate integrator clusters using polynomial coefficients - #1090

Merged
baggepinnen merged 3 commits into
masterfrom
fix/integrator-cluster-validation
Oct 21, 2026
Merged

baggepinnen merged 3 commits into
masterfrom
fix/integrator-cluster-validation

Conversation

@baggepinnen

@baggepinnen baggepinnen commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

The tolerance introduced in ControlSystems.jl#1077 can classify unrelated slow modes as integrators when the candidate multiplicity makes the search radius large. In the supplied example with state dimension 11, the radius reaches approximately 0.862 and includes ten poles, although the matrix is nonsingular. This change returns zero integrators for that example.

The change retains the time-unit-invariant candidate radius and requires the normalized cluster polynomial to be close to z^n: each nonleading coefficient must have magnitude at most n * coefftol, with coefftol = 100eps(T) by default. Checking all coefficients also rejects symmetric slow modes whose centroid is zero. The shared helper applies this validation to transmission zeros as well. It preserves the explicit positional e override and the returned tolerance used by stability and margin calculations.

Regression coverage includes the reported matrix at three time scales, split repeated roots of orders 3–15 in Float32/Float64/BigFloat, symmetric slow modes, integrator excess, and empty/exact-root cases. The docstring describes the coefficient tolerance and the heuristic's limits.

Bumps ControlSystemsBase from 1.25.0 to 1.25.1 for the patch release.

Validation (Julia 1.12.7):

  • 1,029 passing checks across the analysis, frequency-response, time-response, and plotting suites, including 44 new regression checks.
  • git diff --check.

Hostname: demeter2
Session ID: 01a15eb9-1234-7a03-a4be-7f8814d35ca2
Working directory: /tmp/controlsystems-integrator-clusters

@JuliaControlBot

Copy link
Copy Markdown

This is an automated message.
Plots were compared to references. 6/11 images have changed, see differences below.
After pulling this PR, please update the reference images by creating a PR to ControlExamplePlots.jl here.

Difference Reference Image New Image
✔️ 0.0 Reference New
⚠️ 0.021 Reference New
✔️ 0.0 Reference New
✔️ 0.0 Reference New
✔️ 0.0 Reference New
✔️ 0.013 Reference New

@JuliaControlBot

Copy link
Copy Markdown

This is an automated message.
Plots were compared to references. 6/11 images have changed, see differences below.
After pulling this PR, please update the reference images by creating a PR to ControlExamplePlots.jl here.

Difference Reference Image New Image
✔️ 0.0 Reference New
⚠️ 0.021 Reference New
✔️ 0.0 Reference New
✔️ 0.0 Reference New
✔️ 0.0 Reference New
✔️ 0.013 Reference New

@codecov

codecov Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.23%. Comparing base (594c0eb) to head (609d3cb).
⚠️ Report is 4 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1090      +/-   ##
==========================================
+ Coverage   92.22%   92.23%   +0.01%     
==========================================
  Files          42       42              
  Lines        6146     6157      +11     
==========================================
+ Hits         5668     5679      +11     
  Misses        478      478              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@baggepinnen
baggepinnen merged commit 2737b53 into master Oct 21, 2026
4 checks passed
@JuliaControlBot

Copy link
Copy Markdown

This is an automated message.
Plots were compared to references. 6/11 images have changed, see differences below.
After pulling this PR, please update the reference images by creating a PR to ControlExamplePlots.jl here.

Difference Reference Image New Image
✔️ 0.0 Reference New
⚠️ 0.021 Reference New
✔️ 0.0 Reference New
✔️ 0.0 Reference New
✔️ 0.0 Reference New
✔️ 0.013 Reference New

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants