Skip to content

feat: add Levenberg–Marquardt and Goldfarb–Idnani active-set QP - #358

Merged
gabrielfrasantos merged 3 commits into
mainfrom
claude/brave-einstein-5nj7y6
Oct 23, 2026
Merged

gabrielfrasantos merged 3 commits into
mainfrom
claude/brave-einstein-5nj7y6

Conversation

@gabrielfrasantos

@gabrielfrasantos gabrielfrasantos commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Tier 4 of the roadmap items added in #353. With this PR every spec from #353 is deployed and removed from roadmap/.

  • feat: add pid absolute #64 Levenberg–Marquardt (optimization): bounded-iteration damped Gauss–Newton over a LeastSquaresProblem interface (residual, Jacobian w.r.t. a local increment, retraction x ⊕ δ). Damping comes from a DampingPolicy interface, with ConstantDamping provided (λ = 0 is Gauss–Newton). Each step solves the smaller normal system with LU and can be capped by maxStep. A singular system stops the solve instead of dividing by zero.
  • Fix sonarqube coverage #65 Active-set QP (solvers): Goldfarb–Idnani dual method in Powell's J = L⁻ᵀQ / R form, with Givens add/drop updates. It needs no feasible start and reports Optimal / Infeasible / NotPositiveDefinite / IterationLimit. QuadraticProgram is specialised for zero equalities or zero inequalities, since math::Matrix has no zero-size form.

Spec corrections (float32)

  • QP linear dependence: a constraint counts as dependent on the active set when ‖d₂‖ ≤ 1e-5·‖d‖ (relative), not ‖z‖ ≤ ε (absolute). With the absolute test, 73 of 3000 infeasible random problems were reported Optimal after a wild step. The relative test agrees with a brute-force KKT enumeration on all of them.
  • LM Rosenbrock test: tolerance is 1e-4 instead of 1e-5. cond(JJᵀ) ≈ 4600 there, so float32 Gauss–Newton ends its two exact steps at ‖r‖ ≈ 1e-5, right on the spec's threshold.

Verification

  • Unit tests pass on host GCC and Clang.
  • The QP was prototyped in numpy, then the C++ solver was cross-checked on 3000 random problems of shapes (2,1,2), (2,0,4) and (4,2,8), with duplicated, negated, dependent and badly scaled rows. Every optimal x matches the oracle to ≈1e-4 relative; scaled KKT residual ≤ 4.4e-6, primal infeasibility ≤ 1.2e-5, and no negative inequality multipliers. This also exercises the multi-constraint drop path, which the spec's enumerated tests do not reach.
  • Coverage with template instances merged: LM 100%, QP 91%.

Stack

Base: main (#355 and #357 merged). This is the last PR of the stack.


Generated by Claude Code

@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6-tier3 branch from e31c9cb to b4f9aad Compare October 23, 2026 16:26
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6 branch from b2eaa24 to 1f304dc Compare October 23, 2026 16:26
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

✅⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Max errors Warnings Elapsed time
✅ ACTION actionlint 7 0 0 0.73s
✅ CPP clang-format 476 11 0 0 4.11s
✅ CPP cppcheck 476 0 0 9.8s
✅ DOCKERFILE hadolint 1 0 0 0.68s
✅ JSON jsonlint 8 0 0 0.1s
✅ JSON prettier 8 8 0 0 0.6s
⚠️ MARKDOWN markdownlint 144 2 163 0 3.08s
✅ MARKDOWN markdown-table-formatter 144 12 0 0 0.36s
⚠️ SPELL lychee 255 23 0 21.04s
✅ YAML prettier 12 3 0 0 0.62s
✅ YAML yamllint 12 0 0 0.67s

Detailed Issues

⚠️ SPELL / lychee - 23 errors
📝 Summary
---------------------
🔍 Total..........608
🔗 Unique.........452
✅ Successful.....573
⏳ Timeouts.........0
🔀 Redirected.....151
👻 Excluded........11
❓ Unknown..........0
🚫 Errors..........23
⛔ Unsupported.....23

Errors in .github/workflows/static-analysis.yml
[403] https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$ (at 37:21) | Rejected status code: 403 Forbidden

Errors in CHANGELOG.md
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/1 (at 206:31) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/12 (at 221:8) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/13 (at 220:7) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/15 (at 215:18) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/2 (at 213:34) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/26 (at 211:30) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/27 (at 208:23) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/3 (at 204:35) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/4 (at 214:34) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/6 (at 212:53) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/7 (at 209:32) | Rejected status code: 404 Not Found
[404] https://github.com/embedded-pro/embedded-numerical-toolbox/issues/9 (at 207:15) | Rejected status code: 404 Not Found

Errors in doc/filters/active/AhrsMadgwickMahony.md
[ERROR] file://doc/filters/ComplementaryFilter.md (at 131:3) | File not found. Check if file exists and path is correct

Errors in doc/filters/active/ExtendedKalmanFilter.md
[ERROR] file://doc/dynamics/EulerLagrange.md (at 130:3) | File not found. Check if file exists and path is correct

Errors in doc/filters/active/KalmanFilter.md
[ERROR] file://doc/filters/controllers/Lqr.md (at 114:77) | File not found. Check if file exists and path is correct
[ERROR] file://doc/filters/controllers/Lqr.md (at 133:3) | File not found. Check if file exists and path is correct
[ERROR] file://doc/filters/controllers/Pid.md (at 135:3) | File not found. Check if file exists and path is correct
[ERROR] file://doc/filters/solvers/DiscreteAlgebraicRiccatiEquation.md (at 134:3) | File not found. Check if file exists and path is correct

Errors in doc/performance-optimization/README.md
[403] https://developer.arm.com/documentation/100166/latest/ (at 472:3) | Rejected status code: 403 Forbidden
[403] https://developer.arm.com/documentation/dui0473/latest (at 474:3) | Rejected status code: 403 Forbidden

Errors in README.md
[ERROR] file:///releases/latest (at 39:14) | File not found. Check if file exists and path is correct
[404] https://embedded-pro.github.io/embedded-dsp-control/ (at 38:1) | Rejected status code: 404 Not Found

Hint: Followed 151 redirects. You might want to consider replacing redirecting URLs with the resolved URLs. Use verbose mode (`-v`/`-vv`) to see redirection details.
Hint: You can configure accepted/rejected response codes with `-a` or `--accept`
⚠️ MARKDOWN / markdownlint - 163 errors
a ..."]
.github/agents/executor.agent.md:11 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "Canonical rules: `AGENTS.md`. ..."]
.github/agents/orchestrator.agent.md:21 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "Triage requests and route to t..."]
.github/agents/planner.agent.md:11 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "Canonical rules: `AGENTS.md`. ..."]
.github/agents/reviewer.agent.md:14 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "Canonical rules: `AGENTS.md`. ..."]
.github/agents/unit-tester.agent.md:11 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "You add or extend the unit tes..."]
.github/instructions/numerical-cpp.instructions.md:76:401 error MD013/line-length Line length [Expected: 400; Actual: 423]
.github/prompts/orchestrate.prompt.md:8:401 error MD013/line-length Line length [Expected: 400; Actual: 496]
.github/prompts/orchestrate.prompt.md:8 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "Analyze the following task for..."]
.github/prompts/unit-test.prompt.md:8 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "Author (or extend) the unit te..."]
CHANGELOG.md:26 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Bug Fixes"]
CHANGELOG.md:38 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Bug Fixes"]
CHANGELOG.md:52 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Build System"]
CHANGELOG.md:64 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:133 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Miscellaneous"]
CHANGELOG.md:151 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Build System"]
CHANGELOG.md:179 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "⚠ BREAKING CHANGES"]
CHANGELOG.md:183 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:195 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Bug Fixes"]
CHANGELOG.md:202 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:218 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Bug Fixes"]
doc/analysis/Decibels.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 637]
doc/analysis/GoertzelAlgorithm.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 492]
doc/analysis/GoertzelAlgorithm.md:107:401 error MD013/line-length Line length [Expected: 400; Actual: 451]
doc/analysis/HilbertTransform.md:31:34 error MD056/table-column-count Table column count [Expected: 2; Actual: 4; Too many cells, extra data will be missing]
doc/analysis/PowerDensitySpectrum.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 509]
doc/analysis/PowerDensitySpectrum.md:104:20 error MD056/table-column-count Table column count [Expected: 2; Actual: 6; Too many cells, extra data will be missing]
doc/analysis/PowerDensitySpectrum.md:104:17 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/analysis/PowerDensitySpectrum.md:104:20 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/analysis/PowerDensitySpectrum.md:104:32 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/analysis/PowerDensitySpectrum.md:104:38 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/analysis/PowerDensitySpectrum.md:104:45 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/analysis/PowerDensitySpectrum.md:104:135 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/analysis/SignalDetectors.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 481]
doc/control_analysis/FrequencyResponse.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 469]
doc/control_analysis/README.md:11:68 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/control_analysis/README.md:11:147 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/control_analysis/README.md:12:53 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/control_analysis/README.md:12:172 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/control_analysis/README.md:13:68 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/control_analysis/README.md:13:151 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/control_analysis/RootLocus.md:69 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
doc/control_analysis/TransferFunctionStateSpace.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 589]
doc/controllers/Feedforward2Dof.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 627]
doc/controllers/FrictionCompensation.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 420]
doc/controllers/FrictionCompensation.md:29:401 error MD013/line-length Line length [Expected: 400; Actual: 406]
doc/controllers/FrictionCompensation.md:44:401 error MD013/line-length Line length [Expected: 400; Actual: 436]
doc/controllers/GainScheduledController.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 454]
doc/controllers/LeadLagCompensator.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 639]
doc/controllers/Lqg.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 428]
doc/controllers/SaturationRateLimiter.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 451]
doc/controllers/SaturationRateLimiter.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 477]
doc/estimators/ExpectationMaximization.md:104:103 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/estimators/LmsAdaptiveFilter.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 547]
doc/estimators/README.md:11:128 error MD056/table-column-count Table column count [Expected: 2; Actual: 3; Too many cells, extra data will be missing]
doc/estimators/README.md:11:128 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/AhrsMadgwickMahony.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 538]
doc/filters/active/AhrsMadgwickMahony.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 554]
doc/filters/active/AlphaBetaFilter.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 419]
doc/filters/active/AlphaBetaFilter.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 451]
doc/filters/active/KalmanSmoother.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 421]
doc/filters/active/KalmanSmoother.md:111:28 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:111:61 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:111:110 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:122:19 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:122:27 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:122:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:123:19 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:123:27 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:123:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:124:19 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:124:27 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:124:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:125:19 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:125:27 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/KalmanSmoother.md:125:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/UnscentedKalmanFilter.md:11:401 error MD013/line-length Line length [Expected: 400; Actual: 468]
doc/filters/active/UnscentedKalmanFilter.md:149:65 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/active/UnscentedKalmanFilter.md:149:153 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/passive/MedianFilter.md:69:25 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/passive/MedianFilter.md:69:43 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/passive/MedianFilter.md:70:51 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/passive/MedianFilter.md:70:96 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:13:74 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:13:179 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:14:74 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:14:179 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:15:74 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:15:179 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:16:74 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:16:179 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:17:74 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/filters/README.md:17:179 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/math/AngleUtilities.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 603]
doc/math/AngleUtilities.md:58:401 error MD013/line-length Line length [Expected: 400; Actual: 438]
doc/math/CubicSpline.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 453]
doc/math/CubicSpline.md:38:401 error MD013/line-length Line length [Expected: 400; Actual: 476]
doc/math/GivensRotation.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 429]
doc/math/HouseholderTransform.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 455]
doc/math/MatrixExponential.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 555]
doc/math/MatrixNorms.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 452]
doc/math/MatrixNorms.md:42:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/math/MatrixNorms.md:43:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/math/MatrixNorms.md:44:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/math/MatrixNorms.md:45:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/math/MatrixNorms.md:46:67 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/math/SE3Transform.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 538]
doc/math/SE3Transform.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 546]
doc/math/SE3Transform.md:23:401 error MD013/line-length Line length [Expected: 400; Actual: 494]
doc/math/SE3Transform.md:43:401 error MD013/line-length Line length [Expected: 400; Actual: 464]
doc/math/SE3Transform.md:126:401 error MD013/line-length Line length [Expected: 400; Actual: 414]
doc/math/StepResponseMetrics.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 514]
doc/math/StepResponseMetrics.md:61 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
doc/motion_profiles/SCurveProfile.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 438]
doc/motion_profiles/SCurveProfile.md:53:401 error MD013/line-length Line length [Expected: 400; Actual: 480]
doc/motion_profiles/TrapezoidalProfile.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 474]
doc/nonlinear_control/BacksteppingControl.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 594]
doc/nonlinear_control/FeedbackLinearization.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 533]
doc/nonlinear_control/FeedbackLinearization.md:15:401 error MD013/line-length Line length [Expected: 400; Actual: 491]
doc/nonlinear_control/ModelReferenceAdaptiveControl.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 587]
doc/nonlinear_control/README.md:9:80 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/nonlinear_control/README.md:9:258 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/nonlinear_control/README.md:10:80 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/nonlinear_control/README.md:10:258 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/nonlinear_control/README.md:11:80 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/nonlinear_control/README.md:11:270 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/optimization/LevenbergMarquardt.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 437]
doc/optimization/LevenbergMarquardt.md:42:401 error MD013/line-length Line length [Expected: 400; Actual: 511]
doc/optimization/LevenbergMarquardt.md:57:401 error MD013/line-length Line length [Expected: 400; Actual: 410]
doc/regularization/Regularization.md:100:32 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/regularization/Regularization.md:100:135 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/robust_control/ActiveDisturbanceRejection.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 699]
doc/robust_control/ActiveDisturbanceRejection.md:85:401 error MD013/line-length Line length [Expected: 400; Actual: 575]
doc/robust_control/ActiveDisturbanceRejection.md:93:401 error MD013/line-length Line length [Expected: 400; Actual: 622]
doc/robust_control/DisturbanceObserver.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 476]
doc/robust_control/README.md:12:259 error MD060/table-column-style Table column style [Table pipe does not align with header for style "aligned"]
doc/robust_control/SlidingModeControl.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 644]
doc/solvers/ActiveSetQp.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 584]
doc/solvers/ActiveSetQp.md:71:401 error MD013/line-length Line length [Expected: 400; Actual: 703]
doc/solvers/ActiveSetQp.md:107:401 error MD013/line-length Line length [Expected: 400; Actual: 421]
doc/solvers/ConditionNumber.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 461]
doc/solvers/ConditionNumber.md:51:401 error MD013/line-length Line length [Expected: 400; Actual: 425]
doc/solvers/DampedPseudoInverse.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 531]
doc/solvers/DampedPseudoInverse.md:89:401 error MD013/line-length Line length [Expected: 400; Actual: 581]
doc/solvers/JacobiEigenSolver.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 443]
doc/solvers/JacobiEigenSolver.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 609]
doc/solvers/JacobiEigenSolver.md:45:401 error MD013/line-length Line length [Expected: 400; Actual: 427]
doc/solvers/RungeKuttaIntegrators.md:9:401 error MD013/line-length Line length [Expected: 400; Actual: 509]
doc/solvers/SpectralRadius.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 665]
doc/solvers/SymplecticIntegrators.md:7:401 error MD013/line-length Line length [Expected: 400; Actual: 486]
doc/solvers/SymplecticIntegrators.md:35:401 error MD013/line-length Line length [Expected: 400; Actual: 476]
doc/solvers/SymplecticIntegrators.md:63:401 error MD013/line-length Line length [Expected: 400; Actual: 431]
doc/windowing/window.md:5:401 error MD013/line-length Line length [Expected: 400; Actual: 415]
README.md:1 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "[![Quality Gate Status](https:..."]
README.md:9:401 error MD013/line-length Line length [Expected: 400; Actual: 442]
README.md:17:401 error MD013/line-length Line length [Expected: 400; Actual: 507]
roadmap/README.md:11 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]

(Truncated to last 20000 characters out of 21224)

Notices

⚠️ Your configuration references items that have been removed from MegaLinter and are ignored: REPOSITORY_GITLEAKS, REPOSITORY_KICS. See Removed linters to find their replacements.

See detailed reports in MegaLinter artifacts

Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)

  • Documentation: Custom Flavors
  • Command: npx mega-linter-runner@10.1.0 --custom-flavor-setup --custom-flavor-linters ACTION_ACTIONLINT,CPP_CPPCHECK,CPP_CLANG_FORMAT,DOCKERFILE_HADOLINT,JSON_JSONLINT,JSON_PRETTIER,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER,SPELL_LYCHEE,YAML_PRETTIER,YAML_YAMLLINT

MegaLinter is provided by OX Security
Show us your support by starring ⭐ the repository

@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6-tier3 branch from b4f9aad to c3a69f1 Compare October 23, 2026 16:28
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6 branch from 1f304dc to c8bee9e Compare October 23, 2026 16:28
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6-tier3 branch from c3a69f1 to cc806a4 Compare October 23, 2026 16:31
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6 branch 2 times, most recently from d924ecc to 3d3b32e Compare October 23, 2026 16:47
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6-tier3 branch from a445fb3 to cef9e71 Compare October 23, 2026 17:07
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6 branch from 3d3b32e to a586ab5 Compare October 23, 2026 17:07
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6-tier3 branch from cef9e71 to 920b43d Compare October 23, 2026 17:47
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6 branch from a586ab5 to 7a73f5e Compare October 23, 2026 17:47
Base automatically changed from claude/brave-einstein-5nj7y6-tier3 to main October 23, 2026 17:52
…ng policy

Deploy roadmap item 64: bounded-iteration damped Gauss–Newton over a
LeastSquaresProblem interface (residual, Jacobian w.r.t. a local
increment, retraction x ⊕ δ) and a DampingPolicy interface
(ConstantDamping; λ = 0 is Gauss–Newton). Each step solves the smaller
normal system with LU, can be capped by maxStep, and a singular
system stops the solve unconverged instead of dividing by zero.

The Rosenbrock test uses tolerance 1e-4 instead of the spec's 1e-5:
cond(JJᵀ) ≈ 4600 there, so float32 Gauss–Newton ends its two exact
steps at ‖r‖ ≈ 1e-5, right on the spec's threshold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q53m7MZDmHwocmKbhhd2o5
Deploy roadmap item 65: dense strictly convex QP with equality and
inequality constraints, using the Goldfarb–Idnani dual method in
Powell's J = L⁻ᵀQ / R form with Givens add/drop updates. It needs no
feasible start, adds equalities first, then the most violated
inequality, and reports Optimal / Infeasible / NotPositiveDefinite /
IterationLimit. QuadraticProgram is specialised for zero equalities
or zero inequalities, since math::Matrix has no zero-size form.

Change from the spec: a constraint counts as linearly dependent on the
active set when ‖d₂‖ ≤ 1e-5·‖d‖ (relative), not when ‖z‖ ≤ ε. In
float32 the absolute test reported 73 of 3000 infeasible random
problems as optimal after a wild step. The relative test agrees with a
brute-force KKT enumeration on all of them.

The C++ solver was cross-checked on 3000 random problems of shapes
(2,1,2), (2,0,4) and (4,2,8), including duplicated, negated, dependent
and badly scaled rows: optimal x matches the oracle to ≈1e-4
relative, scaled KKT residual ≤ 4.4e-6, no negative inequality
multipliers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q53m7MZDmHwocmKbhhd2o5
Apply markdown-table-formatter's layout to the tables this tier adds
or edits, as suggested by MegaLinter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q53m7MZDmHwocmKbhhd2o5
@gabrielfrasantos
gabrielfrasantos force-pushed the claude/brave-einstein-5nj7y6 branch from 7a73f5e to f02d204 Compare October 23, 2026 17:52
@sonarqubecloud

Copy link
Copy Markdown

@gabrielfrasantos
gabrielfrasantos merged commit 1f6d717 into main Oct 23, 2026
14 checks passed
@gabrielfrasantos
gabrielfrasantos deleted the claude/brave-einstein-5nj7y6 branch October 23, 2026 17:59
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