mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 23:26:52 +08:00

This merges the three packages, matrix, mat64, and cmat128. It then renames this big package to mat. It fixes the import statements and corresponding code
86 lines
2.4 KiB
Go
86 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")
|
|
}
|
|
|
|
u := gsvd.UTo(nil)
|
|
v := gsvd.VTo(nil)
|
|
|
|
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 mat.Dense
|
|
q.Mul(gsvd.ZeroRTo(nil), gsvd.QTo(nil))
|
|
fmt.Printf("\nCommon basis vectors\n\n\tQ^T = %.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^T = ⎡ -8172.4084 -4524.2933 4813.9616⎤
|
|
// ⎢ 22581.8020 12397.1070 -16364.8933⎥
|
|
// ⎣ -8910.8462 -10902.1488 15762.8719⎦
|
|
//
|
|
// Significance:
|
|
// eigenvar_0: +0.7807
|
|
// eigenvar_1: +0.4211
|
|
// eigenvar_2: -0.2482
|
|
}
|