Train only on bound states
This commit is contained in:
parent
56914be36b
commit
75ebbc3247
|
|
@ -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)
|
extrapolating_c = range(0.78, 0.45, 7) # original: range(0.75, 0.40, 8)
|
||||||
|
|
||||||
# calculate training data
|
# 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]
|
data_E = [quick_pole_E(V_system(c)) for c in data_c]
|
||||||
|
|
||||||
# hyperparameters
|
# hyperparameters
|
||||||
|
|
@ -54,6 +54,18 @@ for epoch in 1:epochs
|
||||||
H1 .-= lr .* grad(1) # update H1
|
H1 .-= lr .* grad(1) # update H1
|
||||||
end
|
end
|
||||||
|
|
||||||
# plot the results
|
# evaluate for all points
|
||||||
scatter(real.(data_E), imag.(data_E), label="Target", title="PMM", xlabel="Re E", ylabel="Im E")
|
all_c = vcat(training_c, extrapolating_c)
|
||||||
scatter!(real.(Es), imag.(Es), label="Predicted")
|
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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue