diff -r 9869fa1e0ccd -r d29d1fcf5423 src/pdps.rs
--- a/src/pdps.rs Sun Dec 11 23:19:17 2022 +0200
+++ b/src/pdps.rs Sun Dec 11 23:25:53 2022 +0200
@@ -7,7 +7,7 @@
[arXiv:2212.02991](https://arxiv.org/abs/2212.02991).
The main routine is [`pointsource_pdps`]. It is based on specilisatinn of
-[`generic_pointsource_fb`] through relevant [`FBSpecialisation`] implementations.
+[`generic_pointsource_fb_reg`] through relevant [`FBSpecialisation`] implementations.
Both norm-2-squared and norm-1 data terms are supported. That is, implemented are solvers for
$$
@@ -88,8 +88,10 @@
use crate::fb::{
FBGenericConfig,
FBSpecialisation,
- generic_pointsource_fb
+ generic_pointsource_fb_reg,
+ RegTerm,
};
+use crate::regularisation::NonnegRadonRegTerm;
/// Acceleration
#[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, ValueEnum, Debug)]
@@ -154,7 +156,7 @@
}
}
-/// Specialisation of [`generic_pointsource_fb`] to PDPS.
+/// Specialisation of [`generic_pointsource_fb_reg`] to PDPS.
pub struct PDPS<
'a,
F : Float + ToNalgebraRealField,
@@ -302,10 +304,10 @@
///
/// Returns the final iterate.
#[replace_float_literals(F::cast_from(literal))]
-pub fn pointsource_pdps<'a, F, I, A, GA, 𝒟, BTA, G𝒟, S, K, D, const N : usize>(
+pub fn pointsource_pdps_reg<'a, F, I, A, GA, 𝒟, BTA, G𝒟, S, K, D, Reg, const N : usize>(
opA : &'a A,
b : &'a A::Observable,
- α : F,
+ reg : Reg,
op𝒟 : &'a 𝒟,
config : &PDPSConfig
,
iterator : I,
@@ -328,11 +330,11 @@
S: RealMapping + LocalAnalysis, N>,
K: RealMapping + LocalAnalysis, N>,
BTNodeLookup: BTNode, N>,
- Cube: P2Minimise, F>,
PlotLookup : Plotting,
DiscreteMeasure, F> : SpikeMerging,
PDPS<'a, F, A, D, N> : FBSpecialisation,
- D : Subdifferentiable {
+ D : Subdifferentiable,
+ Reg : RegTerm {
let y = dataterm.some_subdifferential(-b);
let l = opA.lipschitz_factor(&op𝒟).unwrap().sqrt();
@@ -349,8 +351,46 @@
y_prev : y.clone(),
};
- generic_pointsource_fb(
- opA, α, op𝒟, τ, &config.insertion, iterator, plotter, y,
- pdps
+ generic_pointsource_fb_reg(
+ opA, reg, op𝒟, τ, &config.insertion, iterator, plotter, y, pdps
)
-}
\ No newline at end of file
+}
+
+//
+// Deprecated interfaces
+//
+
+#[deprecated(note = "Use `pointsource_pdps_reg`")]
+pub fn pointsource_pdps<'a, F, I, A, GA, 𝒟, BTA, G𝒟, S, K, D, const N : usize>(
+ opA : &'a A,
+ b : &'a A::Observable,
+ α : F,
+ op𝒟 : &'a 𝒟,
+ config : &PDPSConfig,
+ iterator : I,
+ plotter : SeqPlotter,
+ dataterm : D,
+) -> DiscreteMeasure, F>
+where F : Float + ToNalgebraRealField,
+ I : AlgIteratorFactory>,
+ for<'b> &'b A::Observable : std::ops::Neg