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>
1.4 KiB
1.4 KiB
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; the script adds the roots off, 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.