Also store initial iterate in log

Wed, 06 Nov 2024 18:39:24 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Wed, 06 Nov 2024 18:39:24 -0500
changeset 22
cecdde4ff5c9
parent 21
5f2b65738e66
child 23
b719a44b0b26

Also store initial iterate in log

src/fb.rs file | annotate | diff | comparison | revisions
--- a/src/fb.rs	Wed Nov 06 14:58:31 2024 -0500
+++ b/src/fb.rs	Wed Nov 06 18:39:24 2024 -0500
@@ -76,19 +76,20 @@
       F : Desc<M> +  Mapping<M, Codomain = f64>,
       G : Prox<M> +  Mapping<M, Codomain = f64>,
       I : AlgIteratorFactory<IterInfo<M>> {
+    
+    // Closure that calculates current status
+    let status = |x : &M| IterInfo {
+        value : f.apply(x) + g.apply(x),
+        point : x.clone(),
+    };
 
     // Perform as many iterations as requested by `iterator`.
-    for i in iterator.iter() {
+    for i in iterator.iter_init(|| status(&x)) {
         // Forward-backward step
         x = g.prox(τ, f.desc(τ, x));
 
         // If requested by `iterator`, calculate function value and store iterate.
-        i.if_verbose(|| {
-            IterInfo {
-                value : f.apply(&x) + g.apply(&x),
-                point : x.clone(),
-            }
-        })
+        i.if_verbose(|| status(&x))
     }
 
     // Return final iterate.

mercurial