src/nalgebra_support.rs

branch
dev
changeset 62
d8305c9b6fdf
parent 60
848ecc05becf
child 63
f7b87d84864d
equal deleted inserted replaced
61:05089fbc0310 62:d8305c9b6fdf
87 87
88 impl<SM,SV1,M,E> AXPY<E, Vector<E,M,SV1>> for Vector<E,M,SM> 88 impl<SM,SV1,M,E> AXPY<E, Vector<E,M,SV1>> for Vector<E,M,SM>
89 where SM: StorageMut<E,M> + Clone, SV1: Storage<E,M> + Clone, 89 where SM: StorageMut<E,M> + Clone, SV1: Storage<E,M> + Clone,
90 M : Dim, E : Scalar + Zero + One + Float, 90 M : Dim, E : Scalar + Zero + One + Float,
91 DefaultAllocator : Allocator<M> { 91 DefaultAllocator : Allocator<M> {
92 type Owned = OVector<E, M>;
92 93
93 #[inline] 94 #[inline]
94 fn axpy<I : Instance<Vector<E,M,SV1>>>(&mut self, α : E, x : I, β : E) { 95 fn axpy<I : Instance<Vector<E,M,SV1>>>(&mut self, α : E, x : I, β : E) {
95 x.eval(|x̃| Matrix::axpy(self, α, x̃, β)) 96 x.eval(|x̃| Matrix::axpy(self, α, x̃, β))
96 } 97 }
97 98
98 #[inline] 99 #[inline]
99 fn copy_from<I : Instance<Vector<E,M,SV1>>>(&mut self, y : I) { 100 fn copy_from<I : Instance<Vector<E,M,SV1>>>(&mut self, y : I) {
100 y.eval(|ỹ| Matrix::copy_from(self, ỹ)) 101 y.eval(|ỹ| Matrix::copy_from(self, ỹ))
102 }
103
104 #[inline]
105 fn set_zero(&mut self) {
106 self.iter_mut().for_each(|e| *e = E::ZERO);
107 }
108
109 #[inline]
110 fn similar_origin(&self) -> Self::Owned {
111 OVector::zeros_generic(M::from_usize(self.len()), Const)
101 } 112 }
102 } 113 }
103 114
104 /* Implemented automatically as Euclidean. 115 /* Implemented automatically as Euclidean.
105 impl<SM,M,E> Projection<E, L2> for Vector<E,M,SM> 116 impl<SM,M,E> Projection<E, L2> for Vector<E,M,SM>
189 DefaultAllocator : Allocator<M> { 200 DefaultAllocator : Allocator<M> {
190 201
191 type Output = OVector<E, M>; 202 type Output = OVector<E, M>;
192 203
193 #[inline] 204 #[inline]
194 fn similar_origin(&self) -> OVector<E, M> {
195 OVector::zeros_generic(M::from_usize(self.len()), Const)
196 }
197
198 #[inline]
199 fn norm2_squared(&self) -> E { 205 fn norm2_squared(&self) -> E {
200 Vector::<E,M,S>::norm_squared(self) 206 Vector::<E,M,S>::norm_squared(self)
201 } 207 }
202 208
203 #[inline] 209 #[inline]

mercurial