mirror of
https://github.com/gonum/gonum.git
synced 2025-11-01 02:52:49 +08:00
native,testlapack: fix docs and checks for correct size of T and W in Dlaqr2
This commit is contained in:
@@ -48,14 +48,8 @@ import (
|
|||||||
// sr and si must have length kbot+1, otherwise Dlaqr2 will panic.
|
// sr and si must have length kbot+1, otherwise Dlaqr2 will panic.
|
||||||
//
|
//
|
||||||
// v and ldv represent an nw×nw work matrix.
|
// v and ldv represent an nw×nw work matrix.
|
||||||
//
|
// t and ldt represent an nw×nh work matrix, and nh must be at least nw.
|
||||||
// t and ldt represent an nw×nw work matrix T. nh is the number of columns of T
|
// wv and ldwv represent an nv×nw work matrix.
|
||||||
// available for workspace. It must hold that nh <= nw, otherwise Dlaqr2 will
|
|
||||||
// panic.
|
|
||||||
//
|
|
||||||
// wv and ldwv represent an nw×nw work matrix W. nv is the number of rows of W
|
|
||||||
// available for workspace. It must hold that nv <= nw, otherwise Dlaqr2 will
|
|
||||||
// panic.
|
|
||||||
//
|
//
|
||||||
// work must have length at least lwork and lwork must be at least max(1,2*nw),
|
// work must have length at least lwork and lwork must be at least max(1,2*nw),
|
||||||
// otherwise Dlaqr2 will panic. Larger values of lwork may result in greater
|
// otherwise Dlaqr2 will panic. Larger values of lwork may result in greater
|
||||||
@@ -105,13 +99,11 @@ func (impl Implementation) Dlaqr2(wantt, wantz bool, n, ktop, kbot, nw int, h []
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
checkMatrix(nw, nw, v, ldv)
|
checkMatrix(nw, nw, v, ldv)
|
||||||
checkMatrix(nw, nw, t, ldt)
|
checkMatrix(nw, nh, t, ldt)
|
||||||
checkMatrix(nw, nw, wv, ldwv)
|
checkMatrix(nv, nw, wv, ldwv)
|
||||||
switch {
|
switch {
|
||||||
case nh > nw:
|
case nh < nw:
|
||||||
panic("lapack: invalid value of nh")
|
panic("lapack: invalid value of nh")
|
||||||
case nv > nw:
|
|
||||||
panic("lapack: invalid value of nv")
|
|
||||||
case len(sr) != kbot+1:
|
case len(sr) != kbot+1:
|
||||||
panic("lapack: bad length of sr")
|
panic("lapack: bad length of sr")
|
||||||
case len(si) != kbot+1:
|
case len(si) != kbot+1:
|
||||||
|
|||||||
@@ -232,27 +232,27 @@ func testDlaqr2(t *testing.T, impl Dlaqr2er, test dlaqr2Test, opt bool, rnd *ran
|
|||||||
v := randomGeneral(nw, nw, nw+extra, rnd)
|
v := randomGeneral(nw, nw, nw+extra, rnd)
|
||||||
var nh int
|
var nh int
|
||||||
if nw > 0 {
|
if nw > 0 {
|
||||||
nh = rnd.Intn(nw) + 1
|
nh = nw + rnd.Intn(nw) // nh must be at least nw.
|
||||||
}
|
}
|
||||||
tmat := randomGeneral(nw, nw, nw+extra, rnd)
|
tmat := randomGeneral(nw, nh, nh+extra, rnd)
|
||||||
var nv int
|
var nv int
|
||||||
if nw > 0 {
|
if nw > 0 {
|
||||||
nv = rnd.Intn(nw) + 1
|
nv = rnd.Intn(nw) + 1
|
||||||
}
|
}
|
||||||
wv := randomGeneral(nw, nw, nw+extra, rnd)
|
wv := randomGeneral(nv, nw, nw+extra, rnd)
|
||||||
|
|
||||||
var work []float64
|
var work []float64
|
||||||
if opt {
|
if opt {
|
||||||
work = nanSlice(1)
|
work = nanSlice(1)
|
||||||
impl.Dlaqr2(wantt, wantz, n, ktop, kbot, nw, h.Data, h.Stride, iloz, ihiz, z.Data, z.Stride,
|
impl.Dlaqr2(wantt, wantz, n, ktop, kbot, nw, h.Data, h.Stride, iloz, ihiz, z.Data, z.Stride,
|
||||||
sr, si, v.Data, v.Stride, nh, tmat.Data, tmat.Stride, nv, wv.Data, wv.Stride, work, -1)
|
sr, si, v.Data, v.Stride, tmat.Cols, tmat.Data, tmat.Stride, wv.Rows, wv.Data, wv.Stride, work, -1)
|
||||||
work = nanSlice(int(work[0]))
|
work = nanSlice(int(work[0]))
|
||||||
} else {
|
} else {
|
||||||
work = nanSlice(max(1, 2*nw))
|
work = nanSlice(max(1, 2*nw))
|
||||||
}
|
}
|
||||||
|
|
||||||
ns, nd := impl.Dlaqr2(wantt, wantz, n, ktop, kbot, nw, h.Data, h.Stride, iloz, ihiz, z.Data, z.Stride,
|
ns, nd := impl.Dlaqr2(wantt, wantz, n, ktop, kbot, nw, h.Data, h.Stride, iloz, ihiz, z.Data, z.Stride,
|
||||||
sr, si, v.Data, v.Stride, nh, tmat.Data, tmat.Stride, nv, wv.Data, wv.Stride, work, len(work))
|
sr, si, v.Data, v.Stride, tmat.Cols, tmat.Data, tmat.Stride, wv.Rows, wv.Data, wv.Stride, work, len(work))
|
||||||
|
|
||||||
prefix := fmt.Sprintf("Case wantt=%v, wantz=%v, n=%v, ktop=%v, kbot=%v, nw=%v, iloz=%v, ihiz=%v, extra=%v",
|
prefix := fmt.Sprintf("Case wantt=%v, wantz=%v, n=%v, ktop=%v, kbot=%v, nw=%v, iloz=%v, ihiz=%v, extra=%v",
|
||||||
wantt, wantz, n, ktop, kbot, nw, iloz, ihiz, extra)
|
wantt, wantz, n, ktop, kbot, nw, iloz, ihiz, extra)
|
||||||
|
|||||||
Reference in New Issue
Block a user