mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 23:26:52 +08:00
88 lines
2.4 KiB
Go
88 lines
2.4 KiB
Go
// Copyright ©2017 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.
|
|
|
|
package mat_test
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"math"
|
|
|
|
"gonum.org/v1/gonum/mat"
|
|
)
|
|
|
|
func ExampleGSVD() {
|
|
// Perform a GSVD factorization on food production/consumption data for the
|
|
// three years 1990, 2000 and 2014, for Africa and Latin America/Caribbean.
|
|
//
|
|
// See Lee et al. doi:10.1371/journal.pone.0030098 and
|
|
// Alter at al. doi:10.1073/pnas.0530258100 for more details.
|
|
var gsvd mat.GSVD
|
|
ok := gsvd.Factorize(FAO.Africa, FAO.LatinAmericaCaribbean, mat.GSVDU|mat.GSVDV|mat.GSVDQ)
|
|
if !ok {
|
|
log.Fatal("GSVD factorization failed")
|
|
}
|
|
var u, v mat.Dense
|
|
gsvd.UTo(&u)
|
|
gsvd.VTo(&v)
|
|
|
|
s1 := gsvd.ValuesA(nil)
|
|
s2 := gsvd.ValuesB(nil)
|
|
|
|
fmt.Printf("Africa\n\ts1 = %.4f\n\n\tU = %.4f\n\n",
|
|
s1, mat.Formatted(&u, mat.Prefix("\t "), mat.Excerpt(2)))
|
|
fmt.Printf("Latin America/Caribbean\n\ts2 = %.4f\n\n\tV = %.4f\n",
|
|
s2, mat.Formatted(&v, mat.Prefix("\t "), mat.Excerpt(2)))
|
|
|
|
var q, zR mat.Dense
|
|
gsvd.QTo(&q)
|
|
gsvd.ZeroRTo(&zR)
|
|
q.Mul(&zR, &q)
|
|
fmt.Printf("\nCommon basis vectors\n\n\tQᵀ = %.4f\n",
|
|
mat.Formatted(q.T(), mat.Prefix("\t ")))
|
|
|
|
// Calculate the antisymmetric angular distances for each eigenvariable.
|
|
fmt.Println("\nSignificance:")
|
|
for i := 0; i < 3; i++ {
|
|
fmt.Printf("\teigenvar_%d: %+.4f\n", i, math.Atan(s1[i]/s2[i])-math.Pi/4)
|
|
}
|
|
|
|
// Output:
|
|
//
|
|
// Africa
|
|
// s1 = [1.0000 0.9344 0.5118]
|
|
//
|
|
// U = Dims(21, 21)
|
|
// ⎡-0.0005 0.0142 ... ... -0.0060 -0.0055⎤
|
|
// ⎢-0.0010 0.0019 0.0071 0.0075⎥
|
|
// .
|
|
// .
|
|
// .
|
|
// ⎢-0.0007 -0.0024 0.9999 -0.0001⎥
|
|
// ⎣-0.0010 -0.0016 ... ... -0.0001 0.9999⎦
|
|
//
|
|
// Latin America/Caribbean
|
|
// s2 = [0.0047 0.3563 0.8591]
|
|
//
|
|
// V = Dims(14, 14)
|
|
// ⎡ 0.1362 0.0008 ... ... 0.0700 0.2636⎤
|
|
// ⎢ 0.1830 -0.0040 0.2908 0.7834⎥
|
|
// .
|
|
// .
|
|
// .
|
|
// ⎢-0.2598 -0.0324 0.9339 -0.2170⎥
|
|
// ⎣-0.8386 0.1494 ... ... -0.1639 0.4121⎦
|
|
//
|
|
// Common basis vectors
|
|
//
|
|
// Qᵀ = ⎡ 14508.5881 4524.2933 -4813.9616⎤
|
|
// ⎢ 15562.9323 12397.1070 -16364.8933⎥
|
|
// ⎣-14262.7217 -10902.1488 15762.8719⎦
|
|
//
|
|
// Significance:
|
|
// eigenvar_0: +0.7807
|
|
// eigenvar_1: +0.4211
|
|
// eigenvar_2: -0.2482
|
|
}
|