mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 23:26:52 +08:00
lapack/gonum: add Dpotrs
This commit is contained in:

committed by
Vladimír Chalupecký

parent
cebdade430
commit
989b440016
46
lapack/gonum/dpotrs.go
Normal file
46
lapack/gonum/dpotrs.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
// Copyright ©2018 The Gonum Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package gonum
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gonum.org/v1/gonum/blas"
|
||||||
|
"gonum.org/v1/gonum/blas/blas64"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Dpotrs solves a system of n linear equations A*X = B where A is an n×n
|
||||||
|
// symmetric positive definite matrix and B is an n×nrhs matrix. The matrix A is
|
||||||
|
// represented by its Cholesky factorization
|
||||||
|
// A = U^T*U if uplo == blas.Upper
|
||||||
|
// A = L*L^T if uplo == blas.Lower
|
||||||
|
// as computed by Dpotrf. On entry, B contains the right-hand side matrix B, on
|
||||||
|
// return it contains the solution matrix X.
|
||||||
|
func (Implementation) Dpotrs(uplo blas.Uplo, n, nrhs int, a []float64, lda int, b []float64, ldb int) {
|
||||||
|
if uplo != blas.Upper && uplo != blas.Lower {
|
||||||
|
panic(badUplo)
|
||||||
|
}
|
||||||
|
checkMatrix(n, n, a, lda)
|
||||||
|
checkMatrix(n, nrhs, b, ldb)
|
||||||
|
|
||||||
|
if n == 0 || nrhs == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bi := blas64.Implementation()
|
||||||
|
if uplo == blas.Upper {
|
||||||
|
// Solve U^T * U * X = B where U is stored in the upper triangle of A.
|
||||||
|
|
||||||
|
// Solve U^T * X = B, overwriting B with X.
|
||||||
|
bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, n, nrhs, 1, a, lda, b, ldb)
|
||||||
|
// Solve U * X = B, overwriting B with X.
|
||||||
|
bi.Dtrsm(blas.Left, blas.Upper, blas.NoTrans, blas.NonUnit, n, nrhs, 1, a, lda, b, ldb)
|
||||||
|
} else {
|
||||||
|
// Solve L * L^T * X = B where L is stored in the lower triangle of A.
|
||||||
|
|
||||||
|
// Solve L * X = B, overwriting B with X.
|
||||||
|
bi.Dtrsm(blas.Left, blas.Lower, blas.NoTrans, blas.NonUnit, n, nrhs, 1, a, lda, b, ldb)
|
||||||
|
// Solve L^T * X = B, overwriting B with X.
|
||||||
|
bi.Dtrsm(blas.Left, blas.Lower, blas.Trans, blas.NonUnit, n, nrhs, 1, a, lda, b, ldb)
|
||||||
|
}
|
||||||
|
}
|
@@ -35,6 +35,7 @@ type Float64 interface {
|
|||||||
Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int)
|
Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int)
|
||||||
Dpocon(uplo blas.Uplo, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64
|
Dpocon(uplo blas.Uplo, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64
|
||||||
Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool)
|
Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool)
|
||||||
|
Dpotrs(ul blas.Uplo, n, nrhs int, a []float64, lda int, b []float64, ldb int)
|
||||||
Dsyev(jobz EVJob, uplo blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) (ok bool)
|
Dsyev(jobz EVJob, uplo blas.Uplo, n int, a []float64, lda int, w, work []float64, lwork int) (ok bool)
|
||||||
Dtrcon(norm MatrixNorm, uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int, work []float64, iwork []int) float64
|
Dtrcon(norm MatrixNorm, uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int, work []float64, iwork []int) float64
|
||||||
Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) (ok bool)
|
Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) (ok bool)
|
||||||
|
@@ -37,6 +37,15 @@ func Potrf(a blas64.Symmetric) (t blas64.Triangular, ok bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Potrs solves a system of n linear equations A*X = B where A is an n×n
|
||||||
|
// symmetric positive definite matrix and B is an n×nrhs matrix, using the
|
||||||
|
// Cholesky factorization A = U^T*U or A = L*L^T. t contains the corresponding
|
||||||
|
// triangular factor as returned by Potrf. On entry, B contains the right-hand
|
||||||
|
// side matrix B, on return it contains the solution matrix X.
|
||||||
|
func Potrs(t blas64.Triangular, b blas64.General) {
|
||||||
|
lapack64.Dpotrs(t.Uplo, t.N, b.Cols, t.Data, t.Stride, b.Data, b.Stride)
|
||||||
|
}
|
||||||
|
|
||||||
// Gecon estimates the reciprocal of the condition number of the n×n matrix A
|
// Gecon estimates the reciprocal of the condition number of the n×n matrix A
|
||||||
// given the LU decomposition of the matrix. The condition number computed may
|
// given the LU decomposition of the matrix. The condition number computed may
|
||||||
// be based on the 1-norm or the ∞-norm.
|
// be based on the 1-norm or the ∞-norm.
|
||||||
|
Reference in New Issue
Block a user