// RankTwo performs a symmmetric rank-two update to the matrix a and stores // the result in the receiver // m = a + alpha * (x * y' + y * x') func (s *SymDense) RankTwo(a Symmetric, alpha float64, x, y *Vector) { n := s.mat.N if x.Len() != n { panic(matrix.ErrShape) } if y.Len() != n { panic(matrix.ErrShape) } var w SymDense if s == a { w = *s } if w.isZero() { w.mat = blas64.Symmetric{ N: n, Stride: n, Uplo: blas.Upper, Data: use(w.mat.Data, n*n), } } else if n != w.mat.N { panic(matrix.ErrShape) } if s != a { w.CopySym(a) } blas64.Syr2(alpha, x.mat, y.mat, w.mat) *s = w return }
// RankTwo performs a symmmetric rank-two update to the matrix a and stores // the result in the receiver // m = a + alpha * (x * y' + y * x') func (s *SymDense) RankTwo(a Symmetric, alpha float64, x, y []float64) { n := s.mat.N var w SymDense if s == a { w = *s } if w.isZero() { w.mat = blas64.Symmetric{ N: n, Stride: n, Uplo: blas.Upper, Data: use(w.mat.Data, n*n), } } else if n != w.mat.N { panic(ErrShape) } if s != a { w.CopySym(a) } if len(x) != n { panic(ErrShape) } if len(y) != n { panic(ErrShape) } blas64.Syr2(alpha, blas64.Vector{Inc: 1, Data: x}, blas64.Vector{Inc: 1, Data: y}, w.mat) *s = w return }
// RankTwo performs a symmmetric rank-two update to the matrix a and stores // the result in the receiver // m = a + alpha * (x * y' + y * x') func (s *SymDense) RankTwo(a Symmetric, alpha float64, x, y *Vector) { n := s.mat.N if x.Len() != n { panic(matrix.ErrShape) } if y.Len() != n { panic(matrix.ErrShape) } var w SymDense if s == a { w = *s } w.reuseAs(n) if s != a { w.CopySym(a) } blas64.Syr2(alpha, x.mat, y.mat, w.mat) *s = w return }
// RankTwo performs a symmmetric rank-two update to the matrix a and stores // the result in the receiver // m = a + alpha * (x * y' + y * x') func (s *SymDense) RankTwo(a Symmetric, alpha float64, x, y *Vector) { n := s.mat.N if x.Len() != n { panic(matrix.ErrShape) } if y.Len() != n { panic(matrix.ErrShape) } var w SymDense if s == a { w = *s } w.reuseAs(n) if s != a { if rs, ok := a.(RawSymmetricer); ok { s.checkOverlap(rs.RawSymmetric()) } w.CopySym(a) } blas64.Syr2(alpha, x.mat, y.mat, w.mat) *s = w return }