From 75ebbc32470e0f8a32d0419c70e66b09f38f1fe5 Mon Sep 17 00:00:00 2001 From: Nuwan Yapa Date: Fri, 11 Apr 2025 16:28:46 -0400 Subject: [PATCH] Train only on bound states --- calculations/PMM.jl | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/calculations/PMM.jl b/calculations/PMM.jl index 32cdcb0..fefef77 100644 --- a/calculations/PMM.jl +++ b/calculations/PMM.jl @@ -8,7 +8,7 @@ training_c = range(1.2, 0.9, 9) # original: range(1.35, 0.9, 5) extrapolating_c = range(0.78, 0.45, 7) # original: range(0.75, 0.40, 8) # calculate training data -data_c = vcat(training_c, extrapolating_c) +data_c = training_c data_E = [quick_pole_E(V_system(c)) for c in data_c] # hyperparameters @@ -54,6 +54,18 @@ for epoch in 1:epochs H1 .-= lr .* grad(1) # update H1 end -# plot the results -scatter(real.(data_E), imag.(data_E), label="Target", title="PMM", xlabel="Re E", ylabel="Im E") -scatter!(real.(Es), imag.(Es), label="Predicted") +# evaluate for all points +all_c = vcat(training_c, extrapolating_c) +exact_E = [quick_pole_E(V_system(c)) for c in all_c] +extrapolated_E = ComplexF64[] +for c in all_c + H = H0 + c * H1 + evals, evecs = eigen(H) + evals = vcat(evals, conj.(evals)) # include complex conjugates + push!(extrapolated_E, nearest(evals, exact_E[end])) +end + +# plot results +scatter(real.(data_E), imag.(data_E), label="training", title="PMM", xlabel="Re E", ylabel="Im E") +scatter!(real.(exact_E), imag.(exact_E), label="exact", m=:+) +scatter!(real.(extrapolated_E), imag.(extrapolated_E), label="predicted", m=:x)