experiments/laser_and_mirrors2.py

changeset 12
a0d61ac3719e
equal deleted inserted replaced
11:c4f923017349 12:a0d61ac3719e
1 #
2 # Laser and mirrors convection-diffusion experiment with known diffusivity and convectivity
3 #
4 import laser_and_mirrors_aux
5 import numpy as np
6 from laser_and_mirrors_aux import generic_setup, reg_params
7 from measures import DiscreteMeasure_2_f64
8 from pointsource_pde import Problem, RegTerm
9 from pointsource_pde.compose import (
10 ComposeFnWithOperator,
11 InjectSecond,
12 )
13
14 # Give name to the problem
15 name = "laser_and_mirrors2"
16
17 # Override algorithm settings
18 algorithm_overrides = laser_and_mirrors_aux.algorithm_overrides
19
20
21 # Setup the problem
22 def setup(
23 prefix,
24 alpha=reg_params["alpha"],
25 c_noise=reg_params["c_noise"],
26 k_noise=reg_params["k_noise"],
27 noise=reg_params["noise"],
28 seed=reg_params["seed"],
29 sim_oversample=reg_params["sim_oversample"],
30 sim_oversample_time=reg_params["sim_oversample_time"],
31 ):
32 rng = np.random.default_rng(seed=seed)
33
34 dat, auxtrue, aux0, _μ_bound, μ_true, plot_factory, pde = generic_setup(
35 prefix,
36 rng=rng,
37 μ_true=DiscreteMeasure_2_f64([([0.2, 0.3], 0.15), ([0.4, 0.1], 0.04)]),
38 k=0.02,
39 r=0.1,
40 θ=120 * np.pi / 180,
41 c_noise=c_noise,
42 k_noise=k_noise,
43 noise=noise,
44 sim_oversample=sim_oversample,
45 sim_oversample_time=sim_oversample_time,
46 )
47
48 reg = RegTerm.NonnegRadon(alpha)
49
50 μ0 = DiscreteMeasure_2_f64([])
51
52 dat_simple = ComposeFnWithOperator(dat, InjectSecond(auxtrue))
53 dat_simple.curvature_bound_components = lambda: (None, None, None)
54 dat_simple.override_lipschitz = 1.0
55
56 print("Initial data term value:", dat_simple.apply(μ0))
57 print("Data term value at true μ:", dat_simple.apply(μ_true))
58
59 return Problem(
60 dat_simple,
61 reg,
62 None,
63 None,
64 μ0,
65 plot_factory=plot_factory,
66 domain=pde.domain_dims,
67 )

mercurial