Skip to content
This repository has been archived by the owner on Dec 10, 2018. It is now read-only.

Commit

Permalink
Added RawSymmetric case to MulVec
Browse files Browse the repository at this point in the history
Reordered into a switch statement

Pulled from master to fix Symmetric spelling
  • Loading branch information
btracey committed Feb 3, 2015
1 parent 03fc499 commit 1c3549a
Showing 1 changed file with 22 additions and 20 deletions.
42 changes: 22 additions & 20 deletions mat64/vector.go
Expand Up @@ -144,21 +144,22 @@ func (m *Vector) MulVec(a Matrix, trans bool, b *Vector) {
}
}

if a, ok := a.(RawMatrixer); ok {
switch a := a.(type) {
case RawSymmetricer:
amat := a.RawSymmetric()
blas64.Symv(1, amat, b.mat, 0, w.mat)
*m = w
return
case RawMatrixer:
amat := a.RawMatrix()
t := blas.NoTrans
if trans {
t = blas.Trans
}
blas64.Gemv(t,
1, amat, b.mat,
0, w.mat,
)
blas64.Gemv(t, 1, amat, b.mat, 0, w.mat)
*m = w
return
}

if a, ok := a.(Vectorer); ok {
case Vectorer:
row := make([]float64, ac)
for r := 0; r < ar; r++ {
w.mat.Data[r*m.mat.Inc] = blas64.Dot(ac,
Expand All @@ -168,18 +169,19 @@ func (m *Vector) MulVec(a Matrix, trans bool, b *Vector) {
}
*m = w
return
}

row := make([]float64, ac)
for r := 0; r < ar; r++ {
for i := range row {
row[i] = a.At(r, i)
}
var v float64
for i, e := range row {
v += e * b.mat.Data[i*b.mat.Inc]
default:
row := make([]float64, ac)
for r := 0; r < ar; r++ {
for i := range row {
row[i] = a.At(r, i)
}
var v float64
for i, e := range row {
v += e * b.mat.Data[i*b.mat.Inc]
}
w.mat.Data[r*m.mat.Inc] = v
}
w.mat.Data[r*m.mat.Inc] = v
*m = w
return
}
*m = w
}

0 comments on commit 1c3549a

Please sign in to comment.