// For triangular matrix A and vector X compute // X = A * X, X = A.T * X func dtrmv(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.dtrmv_(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 compute // X = A * X, X = A.T * X func dtrmv(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.dtrmv_(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))) }