This repository was archived by the owner on Nov 24, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathlapack.go
190 lines (154 loc) · 6.95 KB
/
lapack.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// Copyright ©2015 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.
// This repository is no longer maintained.
// Development has moved to https://github.com/gonum/gonum.
package lapack
import "github.com/gonum/blas"
const None = 'N'
type Job byte
type Comp byte
// Complex128 defines the public complex128 LAPACK API supported by gonum/lapack.
type Complex128 interface{}
// Float64 defines the public float64 LAPACK API supported by gonum/lapack.
type Float64 interface {
Dgecon(norm MatrixNorm, n int, a []float64, lda int, anorm float64, work []float64, iwork []int) float64
Dgeev(jobvl LeftEVJob, jobvr RightEVJob, n int, a []float64, lda int, wr, wi []float64, vl []float64, ldvl int, vr []float64, ldvr int, work []float64, lwork int) (first int)
Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool
Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int)
Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int)
Dgesvd(jobU, jobVT SVDJob, m, n int, a []float64, lda int, s, u []float64, ldu int, vt []float64, ldvt int, work []float64, lwork int) (ok bool)
Dgetrf(m, n int, a []float64, lda int, ipiv []int) (ok bool)
Dgetri(n int, a []float64, lda int, ipiv []int, work []float64, lwork int) (ok bool)
Dgetrs(trans blas.Transpose, n, nrhs int, a []float64, lda int, ipiv []int, b []float64, ldb int)
Dggsvd3(jobU, jobV, jobQ GSVDJob, m, n, p int, a []float64, lda int, b []float64, ldb int, alpha, beta, u []float64, ldu int, v []float64, ldv int, q []float64, ldq int, work []float64, lwork int, iwork []int) (k, l int, ok bool)
Dlantr(norm MatrixNorm, uplo blas.Uplo, diag blas.Diag, m, n int, a []float64, lda int, work []float64) float64
Dlange(norm MatrixNorm, m, n int, a []float64, lda int, work []float64) float64
Dlansy(norm MatrixNorm, uplo blas.Uplo, n int, a []float64, lda int, work []float64) float64
Dlapmt(forward bool, m, n int, x []float64, ldx int, k []int)
Dormqr(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
Dpotrf(ul blas.Uplo, n int, a []float64, lda 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
Dtrtri(uplo blas.Uplo, diag blas.Diag, n int, a []float64, lda int) (ok bool)
Dtrtrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int) (ok bool)
}
// Direct specifies the direction of the multiplication for the Householder matrix.
type Direct byte
const (
Forward Direct = 'F' // Reflectors are right-multiplied, H_0 * H_1 * ... * H_{k-1}.
Backward Direct = 'B' // Reflectors are left-multiplied, H_{k-1} * ... * H_1 * H_0.
)
// Sort is the sorting order.
type Sort byte
const (
SortIncreasing Sort = 'I'
SortDecreasing Sort = 'D'
)
// StoreV indicates the storage direction of elementary reflectors.
type StoreV byte
const (
ColumnWise StoreV = 'C' // Reflector stored in a column of the matrix.
RowWise StoreV = 'R' // Reflector stored in a row of the matrix.
)
// MatrixNorm represents the kind of matrix norm to compute.
type MatrixNorm byte
const (
MaxAbs MatrixNorm = 'M' // max(abs(A(i,j))) ('M')
MaxColumnSum MatrixNorm = 'O' // Maximum column sum (one norm) ('1', 'O')
MaxRowSum MatrixNorm = 'I' // Maximum row sum (infinity norm) ('I', 'i')
NormFrob MatrixNorm = 'F' // Frobenius norm (sqrt of sum of squares) ('F', 'f', E, 'e')
)
// MatrixType represents the kind of matrix represented in the data.
type MatrixType byte
const (
General MatrixType = 'G' // A dense matrix (like blas64.General).
UpperTri MatrixType = 'U' // An upper triangular matrix.
LowerTri MatrixType = 'L' // A lower triangular matrix.
)
// Pivot specifies the pivot type for plane rotations
type Pivot byte
const (
Variable Pivot = 'V'
Top Pivot = 'T'
Bottom Pivot = 'B'
)
type DecompUpdate byte
const (
ApplyP DecompUpdate = 'P'
ApplyQ DecompUpdate = 'Q'
)
// SVDJob specifies the singular vector computation type for SVD.
type SVDJob byte
const (
SVDAll SVDJob = 'A' // Compute all singular vectors
SVDInPlace SVDJob = 'S' // Compute the first singular vectors and store them in provided storage.
SVDOverwrite SVDJob = 'O' // Compute the singular vectors and store them in input matrix
SVDNone SVDJob = 'N' // Do not compute singular vectors
)
// GSVDJob specifies the singular vector computation type for Generalized SVD.
type GSVDJob byte
const (
GSVDU GSVDJob = 'U' // Compute orthogonal matrix U
GSVDV GSVDJob = 'V' // Compute orthogonal matrix V
GSVDQ GSVDJob = 'Q' // Compute orthogonal matrix Q
GSVDUnit GSVDJob = 'I' // Use unit-initialized matrix
GSVDNone GSVDJob = 'N' // Do not compute orthogonal matrix
)
// EVComp specifies how eigenvectors are computed.
type EVComp byte
const (
// OriginalEV specifies to compute the eigenvectors of the original
// matrix.
OriginalEV EVComp = 'V'
// TridiagEV specifies to compute both the eigenvectors of the input
// tridiagonal matrix.
TridiagEV EVComp = 'I'
// HessEV specifies to compute both the eigenvectors of the input upper
// Hessenberg matrix.
HessEV EVComp = 'I'
// UpdateSchur specifies that the matrix of Schur vectors will be
// updated by Dtrexc.
UpdateSchur EVComp = 'V'
)
// Job types for computation of eigenvectors.
type (
EVJob byte
LeftEVJob byte
RightEVJob byte
)
// Job constants for computation of eigenvectors.
const (
ComputeEV EVJob = 'V' // Compute eigenvectors in Dsyev.
ComputeLeftEV LeftEVJob = 'V' // Compute left eigenvectors.
ComputeRightEV RightEVJob = 'V' // Compute right eigenvectors.
)
// Jobs for Dgebal.
const (
Permute Job = 'P'
Scale Job = 'S'
PermuteScale Job = 'B'
)
// Job constants for Dhseqr.
const (
EigenvaluesOnly EVJob = 'E'
EigenvaluesAndSchur EVJob = 'S'
)
// EVSide specifies what eigenvectors will be computed.
type EVSide byte
// EVSide constants for Dtrevc3.
const (
RightEV EVSide = 'R' // Compute right eigenvectors only.
LeftEV EVSide = 'L' // Compute left eigenvectors only.
RightLeftEV EVSide = 'B' // Compute both right and left eigenvectors.
)
// HowMany specifies which eigenvectors will be computed.
type HowMany byte
// HowMany constants for Dhseqr.
const (
AllEV HowMany = 'A' // Compute all right and/or left eigenvectors.
AllEVMulQ HowMany = 'B' // Compute all right and/or left eigenvectors multiplied by an input matrix.
SelectedEV HowMany = 'S' // Compute selected right and/or left eigenvectors.
)