本文整理匯總了Golang中github.com/hrautila/go/opt/matrix.FloatMatrix.Copy方法的典型用法代碼示例。如果您正苦於以下問題:Golang FloatMatrix.Copy方法的具體用法?Golang FloatMatrix.Copy怎麽用?Golang FloatMatrix.Copy使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/hrautila/go/opt/matrix.FloatMatrix
的用法示例。
在下文中一共展示了FloatMatrix.Copy方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: ConeLp
//.........這裏部分代碼省略.........
var factor kktFactor
var kktsolver kktFactor = nil
if kktfunc, ok := solvers[solvername]; ok {
// kkt function returns us problem spesific factor function.
factor, err = kktfunc(G, dims, A, 0)
// solver is
kktsolver = func(W *FloatMatrixSet, H, Df *matrix.FloatMatrix) (kktFunc, error) {
return factor(W, nil, nil)
}
} else {
err = errors.New(fmt.Sprintf("solver '%s' not known", solvername))
return
}
// res() evaluates residual in 5x5 block KKT system
//
// [ vx ] [ 0 ] [ 0 A' G' c ] [ ux ]
// [ vy ] [ 0 ] [-A 0 0 b ] [ uy ]
// [ vz ] += [ W'*us ] - [-G 0 0 h ] [ W^{-1}*uz ]
// [ vtau ] [ dg*ukappa ] [-c' -b' -h' 0 ] [ utau/dg ]
//
// vs += lmbda o (dz + ds)
// vkappa += lmbdg * (dtau + dkappa).
ws3 := matrix.FloatZeros(cdim, 1)
wz3 := matrix.FloatZeros(cdim, 1)
//
res := func(ux, uy, uz, utau, us, ukappa, vx, vy, vz, vtau, vs, vkappa *matrix.FloatMatrix, W *FloatMatrixSet, dg float64, lmbda *matrix.FloatMatrix) (err error) {
err = nil
// vx := vx - A'*uy - G'*W^{-1}*uz - c*utau/dg
Af(uy, vx, -1.0, 1.0, la.OptTrans)
//fmt.Printf("post-Af vx=\n%v\n", vx)
blas.Copy(uz, wz3)
scale(wz3, W, false, true)
Gf(wz3, vx, -1.0, 1.0, la.OptTrans)
blas.AxpyFloat(c, vx, -utau.Float()/dg)
// vy := vy + A*ux - b*utau/dg
Af(ux, vy, 1.0, 1.0)
blas.AxpyFloat(b, vy, -utau.Float()/dg)
// vz := vz + G*ux - h*utau/dg + W'*us
Gf(ux, vz, 1.0, 1.0)
blas.AxpyFloat(h, vz, -utau.Float()/dg)
blas.Copy(us, ws3)
scale(ws3, W, true, false)
blas.AxpyFloat(ws3, vz, 1.0)
// vtau := vtau + c'*ux + b'*uy + h'*W^{-1}*uz + dg*ukappa
var vtauplus float64 = dg*ukappa.Float() + blas.DotFloat(c, ux) +
blas.DotFloat(b, uy) + sdot(h, wz3, dims, 0)
vtau.SetValue(vtau.Float() + vtauplus)
// vs := vs + lmbda o (uz + us)
blas.Copy(us, ws3)
blas.AxpyFloat(uz, ws3, 1.0)
sprod(ws3, lmbda, dims, 0, &la.SOpt{"diag", "D"})
blas.AxpyFloat(ws3, vs, 1.0)
// vkappa += vkappa + lmbdag * (utau + ukappa)
lscale := lmbda.GetIndex(lmbda.NumElements() - 1)
var vkplus float64 = lscale * (utau.Float() + ukappa.Float())
vkappa.SetValue(vkappa.Float() + vkplus)
return
}
示例2: ConeQp
//.........這裏部分代碼省略.........
err = errors.New(fmt.Sprintf("solver '%s' not yet implemented", solvername))
return
}
// kkt function returns us problem spesific factor function.
factor, err = kkt(G, dims, A, 0)
if err != nil {
fmt.Printf("error on factoring: %s\n", err)
}
// solver is
kktsolver = func(W *FloatMatrixSet) (kktFunc, error) {
return factor(W, P, nil)
}
} else {
err = errors.New(fmt.Sprintf("solver '%s' not known", solvername))
return
}
ws3 := matrix.FloatZeros(cdim, 1)
wz3 := matrix.FloatZeros(cdim, 1)
//
res := func(ux, uy, uz, us, vx, vy, vz, vs *matrix.FloatMatrix, W *FloatMatrixSet, lmbda *matrix.FloatMatrix) (err error) {
// Evaluates residual in Newton equations:
//
// [ vx ] [ vx ] [ 0 ] [ P A' G' ] [ ux ]
// [ vy ] := [ vy ] - [ 0 ] - [ A 0 0 ] * [ uy ]
// [ vz ] [ vz ] [ W'*us ] [ G 0 0 ] [ W^{-1}*uz ]
//
// vs := vs - lmbda o (uz + us).
// vx := vx - P*ux - A'*uy - G'*W^{-1}*uz
fP(ux, vx, -1.0, 1.0)
fA(uy, vx, -1.0, 1.0, la.OptTrans)
blas.Copy(uz, wz3)
scale(wz3, W, true, false)
fG(wz3, vx, -1.0, 1.0, la.OptTrans)
// vy := vy - A*ux
fA(ux, vy, -1.0, 1.0)
// vz := vz - G*ux - W'*us
fG(ux, vz, -1.0, 1.0)
blas.Copy(us, ws3)
scale(ws3, W, true, false)
blas.AxpyFloat(ws3, vz, -1.0)
// vs := vs - lmbda o (uz + us)
blas.Copy(us, ws3)
blas.AxpyFloat(uz, ws3, 1.0)
sprod(ws3, lmbda, dims, 0, la.OptDiag)
blas.AxpyFloat(ws3, vs, -1.0)
return
}
resx0 := math.Max(1.0, math.Sqrt(blas.Dot(q, q).Float()))
resy0 := math.Max(1.0, math.Sqrt(blas.Dot(b, b).Float()))
resz0 := math.Max(1.0, snrm2(h, dims, 0))
//fmt.Printf("resx0: %.17f, resy0: %.17f, resz0: %.17f\n", resx0, resy0, resz0)
var x, y, z, s, dx, dy, ds, dz, rx, ry, rz *matrix.FloatMatrix
var lmbda, lmbdasq, sigs, sigz *matrix.FloatMatrix
var W *FloatMatrixSet
var f, f3 kktFunc
var resx, resy, resz, step, sigma, mu, eta float64
var gap, pcost, dcost, relgap, pres, dres, f0 float64
if cdim == 0 {