Package de.labathome.trustconstr.demo
Class SpectralCondensation
java.lang.Object
de.labathome.trustconstr.demo.SpectralCondensation
Demo: spectral condensation of a 2D closed curve.
The shape is a stellarator-style 2D boundary parameterised as
x(theta) = sum_{m=1..M} X_m cos(m theta)
y(theta) = sum_{m=1..M} Y_m sin(m theta)
sampled on the half-period [0, pi] at theta_i = i * 2*pi/N
for i = 0..N/2. We then look for Fourier coefficients
(X_m, Y_m) (with M > M_target = 3) and a reparametrisation
alpha_i = theta_i + lambda(theta_i),
lambda(theta) = sum_{l=1..L} L_l sin(l theta)
such that the new curve passes exactly through the original sample points
x(alpha_i) = x_i, y(alpha_i) = y_i for every sample i,
while minimising the spectral width
M(p,q) = (sum_m m^{p+q} S_m) / (sum_m m^p S_m), S_m = X_m^2 + Y_m^2,
with p = 4, q = 1.
The trivial guess (X_m = X_m^target, Y_m = Y_m^target, lambda = 0)
trivially satisfies W_c = 0 and provides a baseline spectral
width. The optimiser then redistributes coefficient energy across the
higher modes (m > M_target) by reparametrising via lambda,
driving M(p,q) below the baseline while keeping W_c at
machine zero.
This is the Hirshman-Meier spectral condensation problem that arises in stellarator boundary descriptions.
Constraint dimensioning (with N = 16):
N_samples = N/2 + 1 = 9sample points on[0, pi].L = N/2 - 1 = 7lambda modes -- exactly one mode per interior sample, so lambda can match any prescribed values at the interior samples (the endpoints are pinned by the sin-only ansatz sincelambda(0) = lambda(pi) = 0automatically).M = 6 > M_target = 3curve modes for both x and y.- Free parameters:
2M + L = 19. - Effective equality constraints:
2*N_samples - 2 = 16. (The y-constraint attheta = 0andtheta = piis trivially0 = 0for a sin-only series and is dropped to keep the constraint Jacobian full row rank.) - Excess DOF for spectral minimisation:
19 - 16 = 3.
-
Method Summary
-
Method Details
-
main
-