blob: 6fa981c1309e1861db99f3c353eac6fbc9e8ae35 [file] [log] [blame]
 // Copyright ©2019 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" // Dpotri computes the inverse of a real symmetric positive definite matrix A // using its Cholesky factorization. // // On entry, a contains the triangular factor U or L from the Cholesky // factorization A = Uᵀ*U or A = L*Lᵀ, as computed by Dpotrf. // On return, a contains the upper or lower triangle of the (symmetric) // inverse of A, overwriting the input factor U or L. func (impl Implementation) Dpotri(uplo blas.Uplo, n int, a []float64, lda int) (ok bool) { switch { case uplo != blas.Upper && uplo != blas.Lower: panic(badUplo) case n < 0: panic(nLT0) case lda < max(1, n): panic(badLdA) } // Quick return if possible. if n == 0 { return true } if len(a) < (n-1)*lda+n { panic(shortA) } // Invert the triangular Cholesky factor U or L. ok = impl.Dtrtri(uplo, blas.NonUnit, n, a, lda) if !ok { return false } // Form inv(U)*inv(U)ᵀ or inv(L)ᵀ*inv(L). impl.Dlauum(uplo, n, a, lda) return true }