--- a/experiments/laser_and_mirrors.py Mon Jun 29 00:20:42 2026 +0300 +++ b/experiments/laser_and_mirrors.py Sun Oct 04 13:02:26 2026 -0500 @@ -2,6 +2,8 @@ # Laser and mirrors convection-diffusion experiment with known diffusivity and convectivity # import laser_and_mirrors_aux +import numpy as np +from laser_and_mirrors_aux import generic_setup, reg_params from measures import DiscreteMeasure_2_f64 from pointsource_pde import Problem, RegTerm from pointsource_pde.compose import ( @@ -16,21 +18,46 @@ algorithm_overrides = laser_and_mirrors_aux.algorithm_overrides -# Setup routine -def setup(prefix): - dat, auxtrue, _μ_bound, μ_true, plot_factory = laser_and_mirrors_aux.generic_setup( - prefix +# Setup the problem +def setup( + prefix, + alpha=reg_params["alpha"], + c_noise=reg_params["c_noise"], + k_noise=reg_params["k_noise"], + noise=reg_params["noise"], + seed=reg_params["seed"], + sim_oversample=reg_params["sim_oversample"], + sim_oversample_time=reg_params["sim_oversample_time"], +): + rng = np.random.default_rng(seed=seed) + + dat, auxtrue, aux0, _μ_bound, μ_true, plot_factory, pde = generic_setup( + prefix, + rng=rng, + c_noise=c_noise, + k_noise=k_noise, + noise=noise, + sim_oversample=sim_oversample, + sim_oversample_time=sim_oversample_time, ) + reg = RegTerm.NonnegRadon(alpha) + μ0 = DiscreteMeasure_2_f64([]) - reg = RegTerm.NonnegRadon(1.5e-6) - dat_simple = ComposeFnWithOperator(dat, InjectSecond(auxtrue)) + dat_simple.curvature_bound_components = lambda: (None, None, None) + dat_simple.override_lipschitz = 1.0 print("Initial data term value:", dat_simple.apply(μ0)) print("Data term value at true μ:", dat_simple.apply(μ_true)) return Problem( - dataterm=dat_simple, regterm=reg, μinit=μ0, plot_factory=plot_factory + dat_simple, + reg, + None, + None, + μ0, + plot_factory=plot_factory, + domain=pde.domain_dims, )