1 /*! |
1 /*! |
2 Implementation of scaling of functions on a manifold by a scalar. |
2 Implementation of scaling of functions on a manifold by a scalar. |
3 */ |
3 */ |
4 |
4 |
5 use alg_tools::mapping::{Mapping, Instance}; |
5 use alg_tools::mapping::{Mapping, Instance, Space}; |
6 use crate::manifold::ManifoldPoint; |
6 use crate::manifold::ManifoldPoint; |
7 use crate::fb::{Grad, Desc, Prox}; |
7 use crate::fb::{Grad, Desc, Prox}; |
8 |
8 |
9 /// Structure for a function of type `G`, scaled by a scalar. |
9 /// Structure for a function of type `G`, scaled by a scalar. |
10 pub struct Scaled<G> { |
10 pub struct Scaled<G> { |
20 pub fn new(α : f64, g : G) -> Self { |
20 pub fn new(α : f64, g : G) -> Self { |
21 Scaled{ α, g } |
21 Scaled{ α, g } |
22 } |
22 } |
23 } |
23 } |
24 |
24 |
25 impl<M, G : Mapping<M, Codomain=f64>> Mapping<M> for Scaled< G> { |
25 impl<M : Space, G : Mapping<M, Codomain=f64>> Mapping<M> for Scaled< G> { |
26 type Codomain = f64; |
26 type Codomain = f64; |
27 |
27 |
28 fn apply<I : Instance<M>>(&self, x : I) -> Self::Codomain { |
28 fn apply<I : Instance<M>>(&self, x : I) -> Self::Codomain { |
29 self.g.apply(x) * self.α |
29 self.g.apply(x) * self.α |
30 } |
30 } |