// For triangular matrix A and vector X solve // X = inv(A) * X or X = inv(A.T) * X func dtrsv(uplo, transA, diag string, N int, A []float64, lda int, X []float64, incX int) { cuplo := C.CString(uplo) defer C.free(unsafe.Pointer(cuplo)) ctransA := C.CString(transA) defer C.free(unsafe.Pointer(ctransA)) cdiag := C.CString(diag) defer C.free(unsafe.Pointer(cdiag)) C.dtrsv_(cuplo, ctransA, cdiag, (*C.int)(unsafe.Pointer(&N)), (*C.double)(unsafe.Pointer(&A[0])), (*C.int)(unsafe.Pointer(&lda)), (*C.double)(unsafe.Pointer(&X[0])), (*C.int)(unsafe.Pointer(&incX))) }
// For triangular matrix A and vector X solve // X = inv(A) * X or X = inv(A.T) * X func dtrsv(uplo, transA, diag string, N int, A []float64, lda int, X []float64, incX int) { cuplo := C.CString(uplo) defer C.free(unsafe.Pointer(cuplo)) ctransA := C.CString(transA) defer C.free(unsafe.Pointer(ctransA)) cdiag := C.CString(diag) defer C.free(unsafe.Pointer(cdiag)) // ?? TODO: protect against index out of bounds panics. C.dtrsv_(cuplo, ctransA, cdiag, (*C.int)(unsafe.Pointer(&N)), (*C.double)(unsafe.Pointer(&A[0])), (*C.int)(unsafe.Pointer(&lda)), (*C.double)(unsafe.Pointer(&X[0])), (*C.int)(unsafe.Pointer(&incX))) }