本文整理匯總了Golang中github.com/hrautila/cmat.NewCopy函數的典型用法代碼示例。如果您正苦於以下問題:Golang NewCopy函數的具體用法?Golang NewCopy怎麽用?Golang NewCopy使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了NewCopy函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: TestGivensLQ
// Simple and slow LQ decomposition with Givens rotations
func TestGivensLQ(t *testing.T) {
var d cmat.FloatMatrix
M := 149
N := 167
A := cmat.NewMatrix(M, N)
A1 := cmat.NewCopy(A)
ones := cmat.NewFloatConstSource(1.0)
src := cmat.NewFloatNormSource()
A.SetFrom(src)
A0 := cmat.NewCopy(A)
Qt := cmat.NewMatrix(N, N)
d.Diag(Qt)
d.SetFrom(ones)
// R = G(n)...G(2)G(1)*A; Q = G(1).T*G(2).T...G(n).T ; Q.T = G(n)...G(2)G(1)
for i := 0; i < M; i++ {
// zero elements right of diagonal
for j := N - 2; j >= i; j-- {
c, s, r := lapackd.ComputeGivens(A.Get(i, j), A.Get(i, j+1))
A.Set(i, j, r)
A.Set(i, j+1, 0.0)
// apply rotation to this column starting from row i+1
lapackd.ApplyGivensRight(A, j, j+1, i+1, M-i-1, c, s)
// update Qt = G(k)*Qt
lapackd.ApplyGivensRight(Qt, j, j+1, 0, N, c, s)
}
}
// A = L*Q
blasd.Mult(A1, A, Qt, 1.0, 0.0, gomas.TRANSB)
blasd.Plus(A0, A1, 1.0, -1.0, gomas.NONE)
nrm := lapackd.NormP(A0, lapackd.NORM_ONE)
t.Logf("M=%d, N=%d ||A - L*G(1)..G(n)||_1: %e\n", M, N, nrm)
}
示例2: TestQRFactor
// test that unblocked QR and QRT are equal
func TestQRFactor(t *testing.T) {
M := 411
N := 375
nb := 16
conf := gomas.NewConf()
conf.LB = nb
A := cmat.NewMatrix(M, N)
//W := cmat.NewMatrix(N, nb)
tau := cmat.NewMatrix(N, 1)
zeromean := cmat.NewFloatNormSource()
A.SetFrom(zeromean)
A0 := cmat.NewCopy(A)
tau0 := cmat.NewCopy(tau)
// blocked: QR = A = Q*R
W := lapackd.Workspace(lapackd.QRFactorWork(A, conf))
lapackd.QRFactor(A, tau, W, conf)
conf.LB = 0
lapackd.QRFactor(A0, tau0, W, conf)
ok := A.AllClose(A0)
t.Logf("blk.QRFactor(A) == unblk.QRFactor(A): %v\n", ok)
ok = tau0.AllClose(tau)
t.Logf("blk QR.tau == unblk QR.tau: %v\n", ok)
}
示例3: TestTriRedUpper
func TestTriRedUpper(t *testing.T) {
N := 843
nb := 48
conf := gomas.NewConf()
conf.LB = 0
A := cmat.NewMatrix(N, N)
tau := cmat.NewMatrix(N, 1)
src := cmat.NewFloatNormSource()
A.SetFrom(src, cmat.UPPER)
A1 := cmat.NewCopy(A)
tau1 := cmat.NewCopy(tau)
_ = A1
W := lapackd.Workspace(N)
W1 := lapackd.Workspace(N * nb)
lapackd.TRDReduce(A, tau, W, gomas.UPPER, conf)
conf.LB = nb
lapackd.TRDReduce(A1, tau1, W1, gomas.UPPER, conf)
blasd.Plus(A, A1, -1.0, 1.0, gomas.NONE)
nrm := lapackd.NormP(A, lapackd.NORM_ONE)
t.Logf("N=%d, ||unblk.Trired(A) - blk.Trired(A)||_1: %e\n", N, nrm)
blasd.Axpy(tau, tau1, -1.0)
nrm = blasd.Nrm2(tau)
t.Logf(" ||unblk.Trired(tau) - blk.Trired(tau)||_1: %e\n", nrm)
}
示例4: TestSolveQR
// test: min ||X|| s.t A.T*X = B
func TestSolveQR(t *testing.T) {
M := 799
N := 711
K := 241
nb := 32
conf := gomas.NewConf()
conf.LB = nb
tau := cmat.NewMatrix(N, 1)
A := cmat.NewMatrix(M, N)
src := cmat.NewFloatNormSource()
A.SetFrom(src)
A0 := cmat.NewCopy(A)
B0 := cmat.NewMatrix(M, K)
B0.SetFrom(src)
B := cmat.NewCopy(B0)
W := lapackd.Workspace(lapackd.QRFactorWork(A, conf))
lapackd.QRFactor(A, tau, W, conf)
lapackd.QRSolve(B, A, tau, W, gomas.TRANS, conf)
var Bmin cmat.FloatMatrix
Bmin.SubMatrix(B0, 0, 0, N, K)
blasd.Mult(&Bmin, A0, B, 1.0, -1.0, gomas.TRANSA, conf)
nrm := lapackd.NormP(&Bmin, lapackd.NORM_ONE)
t.Logf("M=%d, N=%d ||B - A.T*X||_1: %e\n", M, N, nrm)
}
示例5: TestLQFactor
func TestLQFactor(t *testing.T) {
M := 611
N := 715
nb := 32
conf := gomas.NewConf()
A := cmat.NewMatrix(M, N)
src := cmat.NewFloatNormSource()
A.SetFrom(src)
tau := cmat.NewMatrix(M, 1)
A1 := cmat.NewCopy(A)
tau1 := cmat.NewCopy(tau)
conf.LB = 0
W := cmat.NewMatrix(M+N, 1)
lapackd.LQFactor(A, tau, W, conf)
conf.LB = nb
W1 := lapackd.Workspace(lapackd.LQFactorWork(A1, conf))
lapackd.LQFactor(A1, tau1, W1, conf)
blasd.Plus(A1, A, 1.0, -1.0, gomas.NONE)
nrm := lapackd.NormP(A1, lapackd.NORM_ONE)
t.Logf("M=%d, N=%d ||blk.LQ(A) - unblk.LQ(A)||_1: %e\n", M, N, nrm)
}
示例6: TestQRTMultLeftIdent
// m > n: A[m,n], I[m,m] --> A == I*A == Q*Q.T*A
func TestQRTMultLeftIdent(t *testing.T) {
M := 411
N := 399
nb := 16
A := cmat.NewMatrix(M, N)
T := cmat.NewMatrix(nb, N)
zeromean := cmat.NewFloatNormSource()
A.SetFrom(zeromean)
A0 := cmat.NewCopy(A)
C := cmat.NewCopy(A)
conf := gomas.NewConf()
conf.LB = nb
//t.Logf("A0:\n%v\n", A0)
// QR = A = Q*R
W := lapackd.Workspace(lapackd.QRTFactorWork(A, conf))
lapackd.QRTFactor(A, T, W, conf)
//t.Logf("T:\n%v\n", T)
// C = Q.T*A
W = lapackd.Workspace(lapackd.QRTMultWork(C, T, gomas.LEFT, conf))
lapackd.QRTMult(C, A, T, W, gomas.LEFT|gomas.TRANS, conf)
// C = Q*C == Q*Q.T*A
lapackd.QRTMult(C, A, T, W, gomas.LEFT, conf)
//t.Logf("A*Q*Q.T:\n%v\n", C)
// A = A - Q*Q.T*A
blasd.Plus(A0, C, 1.0, -1.0, gomas.NONE)
// ||A - Q*Q.T*A||_1
nrm := lapackd.NormP(A0, lapackd.NORM_ONE)
t.Logf("M=%d,N=%d ||A - Q*Q.T*A||_1: %e\n", M, N, nrm)
}
示例7: TestReduceHess
// test: unblk.ReduceHess(A) == blk.ReduceHess(A)
func TestReduceHess(t *testing.T) {
N := 375
nb := 16
conf := gomas.NewConf()
conf.LB = nb
A := cmat.NewMatrix(N, N)
tau := cmat.NewMatrix(N, 1)
zeromean := cmat.NewFloatNormSource()
A.SetFrom(zeromean)
A0 := cmat.NewCopy(A)
tau0 := cmat.NewCopy(tau)
// blocked reduction
W := lapackd.Workspace(lapackd.HessReduceWork(A, conf))
lapackd.HessReduce(A, tau, W, conf)
// unblocked reduction
conf.LB = 0
lapackd.HessReduce(A0, tau0, W, conf)
ok := A.AllClose(A0)
t.Logf("blk.ReduceHess(A) == unblk.ReduceHess(A): %v\n", ok)
ok = tau0.AllClose(tau)
t.Logf("blk HessQ.tau == unblk HessQ.tau: %v\n", ok)
// ||A - A0||_1
blasd.Plus(A, A0, 1.0, -1.0, gomas.NONE)
nrm := lapackd.NormP(A, lapackd.NORM_ONE)
t.Logf("||H - H0||_1: %e\n", nrm)
}
示例8: TestUnblkQRMultRight
// QR decompose A, then compute ||A - (R.T*Q.T).T||_1, should be small
func TestUnblkQRMultRight(t *testing.T) {
M := 711
N := 593
A := cmat.NewMatrix(M, N)
C := cmat.NewMatrix(N, M)
tau := cmat.NewMatrix(N, 1)
zeromean := cmat.NewFloatNormSource()
A.SetFrom(zeromean)
A0 := cmat.NewCopy(A)
conf := gomas.NewConf()
conf.LB = 0
// QR = A = Q*R
W := lapackd.Workspace(lapackd.QRFactorWork(A, conf))
lapackd.QRFactor(A, tau, W, conf)
// C = transpose(TriU(QR)) = R.T
C.Transpose(cmat.TriU(cmat.NewCopy(A), cmat.NONE))
// C = C*Q.T = R.T*Q.T
W = lapackd.Workspace(lapackd.QRMultWork(C, gomas.RIGHT, conf))
err := lapackd.QRMult(C, A, tau, W, gomas.RIGHT|gomas.TRANS, conf)
if err != nil {
t.Logf("err: %v\n", err)
}
// A = A - QR
blasd.Plus(A0, C, 1.0, -1.0, gomas.TRANSB)
// ||A - Q*R||_1
nrm := lapackd.NormP(A0, lapackd.NORM_ONE)
t.Logf("M=%d,N=%d ||A - (R.T*Q.T).T||_1: %e\n", M, N, nrm)
}
示例9: TestUnblkQRMultLeft
// QR decompose A, then compute ||A - Q*R||_1, should be small
func TestUnblkQRMultLeft(t *testing.T) {
M := 711
N := 593
A := cmat.NewMatrix(M, N)
tau := cmat.NewMatrix(N, 1)
zeromean := cmat.NewFloatNormSource()
A.SetFrom(zeromean)
A0 := cmat.NewCopy(A)
conf := gomas.NewConf()
conf.LB = 0
// QR = A = Q*R
W := lapackd.Workspace(lapackd.QRFactorWork(A, conf))
lapackd.QRFactor(A, tau, W, conf)
// C = TriU(QR) = R
C := cmat.TriU(cmat.NewCopy(A), cmat.NONE)
// C = Q*C
W = lapackd.Workspace(lapackd.QRMultWork(C, gomas.LEFT, conf))
err := lapackd.QRMult(C, A, tau, W, gomas.LEFT, conf)
if err != nil {
t.Logf("err: %v\n", err)
}
// A = A - QR
blasd.Plus(A0, C, 1.0, -1.0, gomas.NONE)
// ||A - Q*R||_1
nrm := lapackd.NormP(A0, lapackd.NORM_ONE)
t.Logf("M=%d,N=%d ||A - Q*R||_1: %e\n", M, N, nrm)
}
示例10: test_bdsvd
func test_bdsvd(N, flags, kind int, verbose bool, t *testing.T) {
var At, sD, sE, tmp cmat.FloatMatrix
uplo := "upper"
offdiag := 1
if flags&gomas.LOWER != 0 {
offdiag = -1
uplo = "lower"
}
A0 := cmat.NewMatrix(N, N)
desc := setDiagonals(A0, offdiag, kind)
At.SubMatrix(A0, 0, 0, N, N)
sD.Diag(A0, 0)
sE.Diag(A0, offdiag)
D := cmat.NewCopy(&sD)
E := cmat.NewCopy(&sE)
// unit singular vectors
U := cmat.NewMatrix(N, N)
sD.Diag(U, 0)
sD.Add(1.0)
V := cmat.NewMatrix(N, N)
sD.Diag(V, 0)
sD.Add(1.0)
W := cmat.NewMatrix(4*N, 1)
C := cmat.NewMatrix(N, N)
lapackd.BDSvd(D, E, U, V, W, flags|gomas.WANTU|gomas.WANTV)
blasd.Mult(C, U, U, 1.0, 0.0, gomas.TRANSA)
sD.Diag(C)
sD.Add(-1.0)
nrmu := lapackd.NormP(C, lapackd.NORM_ONE)
blasd.Mult(C, V, V, 1.0, 0.0, gomas.TRANSB)
sD.Add(-1.0)
nrmv := lapackd.NormP(C, lapackd.NORM_ONE)
blasd.Mult(C, U, A0, 1.0, 0.0, gomas.TRANSA)
blasd.Mult(&At, C, V, 1.0, 0.0, gomas.TRANSB)
if verbose && N < 10 {
t.Logf("D:\n%v\n", asRow(&tmp, D))
t.Logf("U:\n%v\n", U)
t.Logf("V:\n%v\n", V)
t.Logf("U.T*A*V\n%v\n", &At)
}
sD.Diag(&At)
blasd.Axpy(&sD, D, -1.0)
nrma := lapackd.NormP(&At, lapackd.NORM_ONE)
t.Logf("N=%d [%s,%s] ||U.T*A*V - bdsvd(A)||_1: %e\n", N, uplo, desc, nrma)
t.Logf(" ||I - U.T*U||_1: %e\n", nrmu)
t.Logf(" ||I - V.T*V||_1: %e\n", nrmv)
}
示例11: TestQLMultRightTrans
// test: C = C*Q.T
func TestQLMultRightTrans(t *testing.T) {
var d, di0, di1 cmat.FloatMatrix
M := 891
N := 853
lb := 36
conf := gomas.NewConf()
A := cmat.NewMatrix(M, N)
src := cmat.NewFloatNormSource()
A.SetFrom(src)
C0 := cmat.NewMatrix(N, M)
d.Diag(C0, M-N)
ones := cmat.NewFloatConstSource(1.0)
d.SetFrom(ones)
C1 := cmat.NewCopy(C0)
I0 := cmat.NewMatrix(N, N)
I1 := cmat.NewCopy(I0)
di0.Diag(I0)
di1.Diag(I1)
tau := cmat.NewMatrix(N, 1)
W := cmat.NewMatrix(lb*(M+N), 1)
conf.LB = lb
lapackd.QLFactor(A, tau, W, conf)
conf.LB = 0
lapackd.QLMult(C0, A, tau, W, gomas.RIGHT|gomas.TRANS, conf)
// I = Q*Q.T - I
blasd.Mult(I0, C0, C0, 1.0, 0.0, gomas.TRANSB, conf)
blasd.Add(&di0, -1.0)
n0 := lapackd.NormP(I0, lapackd.NORM_ONE)
conf.LB = lb
lapackd.QLMult(C1, A, tau, W, gomas.RIGHT|gomas.TRANS, conf)
// I = Q*Q.T - I
blasd.Mult(I1, C1, C1, 1.0, 0.0, gomas.TRANSB, conf)
blasd.Add(&di1, -1.0)
n1 := lapackd.NormP(I1, lapackd.NORM_ONE)
if N < 10 {
t.Logf("unblk C0*Q:\n%v\n", C0)
t.Logf("blk. C2*Q:\n%v\n", C1)
}
blasd.Plus(C0, C1, 1.0, -1.0, gomas.NONE)
n2 := lapackd.NormP(C0, lapackd.NORM_ONE)
t.Logf("M=%d, N=%d ||unblk.QLMult(C) - blk.QLMult(C)||_1: %e\n", M, N, n2)
t.Logf("unblk M=%d, N=%d ||I - Q*Q.T||_1: %e\n", M, N, n0)
t.Logf("blk M=%d, N=%d ||I - Q*Q.T||_1: %e\n", M, N, n1)
}
示例12: TestTrdMultUpper
func TestTrdMultUpper(t *testing.T) {
var dt, et, da, ea cmat.FloatMatrix
N := 843
nb := 48
conf := gomas.NewConf()
conf.LB = nb
A := cmat.NewMatrix(N, N)
tau := cmat.NewMatrix(N, 1)
src := cmat.NewFloatNormSource()
// create symmetric matrix
A.SetFrom(src, cmat.SYMM)
A0 := cmat.NewCopy(A)
W := lapackd.Workspace(lapackd.TRDReduceWork(A, conf))
lapackd.TRDReduce(A, tau, W, gomas.UPPER, conf)
// make tridiagonal matrix T
T0 := cmat.NewMatrix(N, N)
dt.Diag(T0)
da.Diag(A)
blasd.Copy(&dt, &da)
ea.Diag(A, 1)
et.Diag(T0, 1)
blasd.Copy(&et, &ea)
et.Diag(T0, -1)
blasd.Copy(&et, &ea)
T1 := cmat.NewCopy(T0)
// compute Q*T*Q.T (unblocked)
conf.LB = 0
lapackd.TRDMult(T0, A, tau, W, gomas.LEFT|gomas.UPPER, conf)
lapackd.TRDMult(T0, A, tau, W, gomas.RIGHT|gomas.TRANS|gomas.UPPER, conf)
blasd.Plus(T0, A0, 1.0, -1.0, gomas.NONE)
nrm := lapackd.NormP(T0, lapackd.NORM_ONE)
t.Logf("N=%d, unblk.||A - Q*T*Q.T||_1: %e\n", N, nrm)
// compute Q*T*Q.T (blocked)
conf.LB = nb
W = lapackd.Workspace(lapackd.TRDMultWork(A, gomas.LEFT|gomas.UPPER, conf))
lapackd.TRDMult(T1, A, tau, W, gomas.LEFT|gomas.UPPER, conf)
lapackd.TRDMult(T1, A, tau, W, gomas.RIGHT|gomas.TRANS|gomas.UPPER, conf)
blasd.Plus(T1, A0, 1.0, -1.0, gomas.NONE)
nrm = lapackd.NormP(T1, lapackd.NORM_ONE)
t.Logf("N=%d, blk.||A - Q*T*Q.T||_1: %e\n", N, nrm)
}
示例13: test_trdevd
func test_trdevd(N, flags, kind int, verbose bool, t *testing.T) {
var At, sD, sE, tmp cmat.FloatMatrix
A0 := cmat.NewMatrix(N, N)
desc := setTrdDiagonals(A0, kind)
At.SubMatrix(A0, 0, 0, N, N)
sD.Diag(A0, 0)
sE.Diag(A0, 1)
D := cmat.NewCopy(&sD)
E := cmat.NewCopy(&sE)
V := cmat.NewMatrix(N, N)
sD.Diag(V, 0)
sD.Add(1.0)
W := cmat.NewMatrix(4*N, 1)
C := cmat.NewMatrix(N, N)
if verbose && N < 10 {
t.Logf("A0:\n%v\n", A0.ToString("%6.3f"))
t.Logf("V.pre:\n%v\n", V.ToString("%6.3f"))
}
lapackd.TRDEigen(D, E, V, W, flags|gomas.WANTV)
for k := 0; k < N-1; k++ {
if E.GetAt(k) != 0.0 {
t.Logf("E[%d] != 0.0 (%e)\n", k, E.GetAt(k))
}
}
blasd.Mult(C, V, V, 1.0, 0.0, gomas.TRANSB)
sD.Diag(C)
sD.Add(-1.0)
nrmv := lapackd.NormP(C, lapackd.NORM_ONE)
blasd.Mult(C, V, A0, 1.0, 0.0, gomas.TRANSA)
blasd.Mult(&At, C, V, 1.0, 0.0, gomas.NONE)
if verbose && N < 10 {
t.Logf("D:\n%v\n", asRow(&tmp, D).ToString("%6.3f"))
t.Logf("V:\n%v\n", V.ToString("%6.3f"))
t.Logf("V.T*A*V\n%v\n", At.ToString("%6.3f"))
}
sD.Diag(&At)
blasd.Axpy(&sD, D, -1.0)
nrma := lapackd.NormP(&At, lapackd.NORM_ONE)
t.Logf("N=%d [%s] ||V.T*A*V - eigen(A)||_1: %e\n", N, desc, nrma)
t.Logf(" ||I - V.T*V||_1: %e\n", nrmv)
}
示例14: TestBlockedQRMultRightIdent
// m > n: A[m,n], I[m,m] --> A.T == A.T*I == A.T*Q*Q.T
func TestBlockedQRMultRightIdent(t *testing.T) {
M := 511
N := 489
A := cmat.NewMatrix(M, N)
C := cmat.NewMatrix(N, M)
tau := cmat.NewMatrix(N, 1)
zeromean := cmat.NewFloatNormSource()
A.SetFrom(zeromean)
A0 := cmat.NewCopy(A)
C.Transpose(A)
conf := gomas.NewConf()
conf.LB = 32
// QR = A = Q*R
W := lapackd.Workspace(lapackd.QRFactorWork(A, conf))
lapackd.QRFactor(A, tau, W, conf)
// C = A.T*Q
W = lapackd.Workspace(lapackd.QRMultWork(C, gomas.RIGHT, conf))
lapackd.QRMult(C, A, tau, W, gomas.RIGHT, conf)
// C = C*Q.T == A.T*Q*Q.T
lapackd.QRMult(C, A, tau, W, gomas.RIGHT|gomas.TRANS, conf)
//t.Logf("A*Q*Q.T:\n%v\n", C)
// A = A - (A.T*Q*Q.T).T
blasd.Plus(A0, C, 1.0, -1.0, gomas.TRANSB)
// ||A - (A.T*Q*Q.T).T||_1
nrm := lapackd.NormP(A0, lapackd.NORM_ONE)
t.Logf("M=%d,N=%d ||A - (A.T*Q*Q.T).T||_1: %e\n", M, N, nrm)
}
示例15: TestSolveBKLowerBig
func TestSolveBKLowerBig(t *testing.T) {
N := 427
normsrc := cmat.NewFloatNormSource(5.0, 10.0)
A := cmat.NewMatrix(N, N)
A.SetFrom(normsrc, cmat.LOWER)
X := cmat.NewMatrix(N, 2)
X.SetFrom(normsrc)
B := cmat.NewCopy(X)
blasd.MultSym(B, A, X, 1.0, 0.0, gomas.LOWER|gomas.LEFT)
ipiv := lapackd.NewPivots(N)
conf := gomas.NewConf()
conf.LB = 16
W := lapackd.Workspace(lapackd.BKFactorWork(A, conf))
lapackd.BKFactor(A, W, ipiv, gomas.LOWER, conf)
lapackd.BKSolve(B, A, ipiv, gomas.LOWER, conf)
ok := B.AllClose(X)
t.Logf("N=%d unblk.BK(X) == A.-1*B : %v\n", N, ok)
blasd.Plus(B, X, 1.0, -1.0, gomas.NONE)
nrm := lapackd.NormP(B, lapackd.NORM_ONE)
t.Logf(" ||X - A.-1*B||_1: %.4e\n", nrm)
}