Files
plot_mu_trajectories/README.md
T
loicvhandClaude Opus 5 bdcf0e0b02 Plot the mu-trajectory for any non-empty 2D quadric
The poles, branches and mu range now follow the eigenvalues (one or two
poles of either sign), so hyperbolas, parabolas, line pairs, single
lines and points are supported, not only ellipses.

- Find every root of f from sign changes, including across inactive
  poles where quadproj's f is 0/0; mu* is the root between the active
  poles surrounding 0 and the other roots get their own marker.
- Mark the apex of conical quadrics as a degenerate KKT point.
- Draw the quadric as the contour psi = 0 and frame the trajectory
  panel on x0, the KKT points and the vertices.
- Use the correct asymptote direction for repeated eigenvalues.
- Test every quadric type against brute-force sampling.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 21:45:51 +02:00

32 lines
1.4 KiB
Markdown

# mu-trajectories
Visualize the KKT trajectory of the Euclidean projection of a point `x0` onto a 2D quadric
`x'Ax + b'x + c = 0` (ellipse, hyperbola, parabola, two lines, a line or a point):
x(mu) = (I + mu A)^{-1} (x0 - mu b / 2)
The figure shows the trajectory in the plane, the secular function `f(mu)`, the distance
`||x0 - x(mu)||` and `f'(mu)`, together with the KKT points: `x(mu*)`, the other roots of `f`
and, when `x0` has a zero normalized coordinate, the degenerate points `x^d`.
## Usage
pip install -r requirements.txt
python plot_mu_trajectories.py # every case, into figures/
python plot_mu_trajectories.py x_trajectories_mu_2 # a single case
pytest
Cases (`A`, `x0`, and optionally `b` and `c`) are listed in `CASES` at the top of
`plot_mu_trajectories.py`; each one produces `<name>.png` and `<name>.pdf`.
Text is typeset with LaTeX (`text.usetex`) when `latex` is on the `PATH`, with the `cm-super` and
`type1cm` packages; otherwise matplotlib's Computer Modern math font is used.
## Files
- `plot_mu_trajectories.py`: the figure. The quadric, `x(mu)`, `f`, `f'` and the degenerate
points come from [quadproj](https://loicvh.gitlab.io/quadproj); the script adds the roots of
`f`, the asymptotes and the plot limits.
- `test_plot_mu_trajectories.py`: checks, for each type of quadric, that the KKT points contain
the projection found by brute-force sampling, and that every type can be plotted.