graph LR A["Exact Update\nP โ ฮด(P - ฯยทuuแต/ฯ)"] -->|"Floating-point errors"| B["Drifted P\nโ Not positive definite"] B --> C["Algorithm fails โ"] style A fill:#e3f2fd style B fill:#fce4ec,stroke:#f44336 style C fill:#f44336
graph LR Start["Cut (g, ฮฒ)"] --> Compute["Compute gฬ = Qยทg\nฯ = gฬแตยทg, ฯยฒ = ฮบยทฯ"] Compute --> NormalBranch{"Algorithm?"} NormalBranch -->|"Normal"| Normal[" Q -= (ฯ/ฯ)ยทgฬยทgฬแต ฮบ *= ฮด xc -= (ฯ/ฯ)ยทgฬ "] NormalBranch -->|"Stable"| Stable[" w = Lโปยนg (fwd sub) z = Dโปยนw gฬ = Lโปแตz (bwd sub) LDLแต rank-1 update ฮบ *= ฮด xc -= (ฯ/ฯ)ยทgฬ "] Normal --> Done["Updated ellipsoid"] Stable --> Done style Start fill:#ff9800 style Compute fill:#2196f3 style NormalBranch fill:#f44336 style Normal fill:#e3f2fd style Stable fill:#e8f5e9 style Done fill:#4caf50
graph LR A["1. Run Ell &\nEllStable on\nsame problem"] --> B["2. Compare\nsolutions\n(maxdiff < 1e-6)"] B --> C{"Match?"} C -->|"Yes โ "| D["3. Benchmark\nboth versions"] C -->|"No โ"| E["Abort โ\ninvestigate"] style A fill:#e3f2fd style B fill:#f3e5f5 style C fill:#f44336 style D fill:#4caf50 style E fill:#f44336
graph LR subgraph Spec["Filter Specs"] Wp["Passband\n0โ0.12ฯ"] --> Rp["Ripple\nยฑ0.125 dB"] Ws["Stopband\n0.20ฯโฯ"] --> As["Attenuation\nโ18 dB"] end Spec --> Oracle["LowpassOracle\nassess_optim()"] Oracle --> Cut["Parallel Cut\n(both bounds)"] Cut --> Ellipsoid["Update\nEllipsoid"] style Spec fill:#f3e5f5 style Oracle fill:#2196f3 style Cut fill:#ff9800 style Ellipsoid fill:#4caf50
graph TD subgraph Normal["Profit Normal (83 iters)"] A["Ell 96.3ฮผs"] --> B["Stable 100.4ฮผs"] end subgraph Robust["Profit Robust (90 iters)"] C["Ell 114.4ฮผs"] --> D["Stable 120.0ฮผs"] end style A fill:#e3f2fd style B fill:#e8f5e9 style C fill:#e3f2fd style D fill:#e8f5e9
graph TD subgraph Par["Parallel Cut (26k iters)"] A["Ell 297ms"] --> B["Stable 352ms"] end subgraph Ser["Serial Cut (40k iters)"] C["Ell 438ms"] --> D["Stable 516ms"] end style A fill:#e3f2fd style B fill:#e8f5e9 style C fill:#e3f2fd style D fill:#e8f5e9
graph LR A["LP-48\nEll 719ms"] --> B["LP-48\nStable 750ms"] C["LP-64\nEll 1047ms"] --> D["LP-64\nStable 1156ms"] style A fill:#e3f2fd style B fill:#a5d6a7 style C fill:#e3f2fd style D fill:#a5d6a7
graph TD subgraph Legend[" "] L1["Normal: Ell"] --> L2["Green: Stable"] end style L1 fill:#e3f2fd style L2 fill:#a5d6a7
graph TD subgraph Complexity["O(nยฒ) per iteration"] D16["n=16: 4ฮผs"] --> D32["n=32: 12ฮผs"] D32 --> D64["n=64: 30ฮผs"] D64 --> D128["n=128: 130ฮผs"] D128 --> D256["n=256: 720ฮผs"] end style Complexity fill:#f3e5f5 style D16 fill:#e3f2fd style D32 fill:#e3f2fd style D64 fill:#e3f2fd style D128 fill:#e3f2fd style D256 fill:#e3f2fd
graph LR subgraph Findings["Key Findings"] F1["โ Same solution\n(verification passes)"] F2["๐ Same speed\n(within ยฑ8%)"] F3["๐ก๏ธ Stable is\nnumerically safe"] end style Findings fill:#f3e5f5 style F1 fill:#4caf50 style F2 fill:#2196f3 style F3 fill:#ff9800
graph LR A["Cutting-plane\nmethod"] --> B["Many iters\n(1000s)"] B --> C{"Stable\nLDLแต?"} C -->|"Yes ๐ก๏ธ"| D["P stays\npositive def."] C -->|"No โ ๏ธ"| E["P drifts โ\nalgorithm fails"] D --> F["Converges to\nsolution โ "] E --> G["NaN / garbage โ"] style A fill:#ff9800 style B fill:#2196f3 style C fill:#f44336 style D fill:#4caf50 style E fill:#fce4ec,stroke:#f44336 style F fill:#4caf50 style G fill:#f44336
graph TD subgraph Future["Future Investigations"] A["GPU acceleration\n(n > 1000)"] --> B["Mixed precision\n(FP16/FP32)"] A --> C["Sparse LDLแต\nupdates"] B --> D["Auto-detect\nwhen stable needed"] end style Future fill:#f3e5f5 style A fill:#e3f2fd style B fill:#e3f2fd style C fill:#e3f2fd style D fill:#e3f2fd
graph TD Q["Ell vs EllStable?"] --> R1["โ Same solution\n(verified)"] Q --> R2["โก Same speed\n(ยฑ8%)"] Q --> R3["๐ก๏ธ Stable is free\ninsurance"] style Q fill:#ff9800,stroke:#e65100,stroke-width:3px style R1 fill:#4caf50 style R2 fill:#2196f3 style R3 fill:#9c27b0