1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
use na::allocator::Allocator; use na::{DefaultAllocator, DimName, MatrixMN, Scalar}; use {Dual, Float, Zero}; pub fn norm<T: Scalar + Float, M: DimName, N: DimName>(v: &MatrixMN<Dual<T>, M, N>) -> Dual<T> where Dual<T>: Float, DefaultAllocator: Allocator<Dual<T>, N> + Allocator<Dual<T>, M, N>, { let mut val = Dual::zero(); for i in 0..M::dim() { for j in 0..N::dim() { val = val + v[(i, j)].powi(2); } } val.sqrt() }