github.com/gopherd/gonum@v0.0.4/mat/hogsvd_example_test.go (about)

     1  // Copyright ©2017 The Gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package mat_test
     6  
     7  import (
     8  	"fmt"
     9  	"log"
    10  
    11  	"github.com/gopherd/gonum/mat"
    12  )
    13  
    14  func ExampleHOGSVD() {
    15  	// Perform an HOGSVD factorization on food production/consumption data for the
    16  	// three years 1990, 2000 and 2014.
    17  	//
    18  	// See Ponnapalli et al. doi:10.1371/journal.pone.0028072 and
    19  	// Alter at al. doi:10.1073/pnas.0530258100 for more details.
    20  	var gsvd mat.HOGSVD
    21  	ok := gsvd.Factorize(FAO.Africa, FAO.Asia, FAO.LatinAmericaCaribbean, FAO.Oceania)
    22  	if !ok {
    23  		log.Fatalf("HOGSVD factorization failed: %v", gsvd.Err())
    24  	}
    25  
    26  	for i, n := range []string{"Africa", "Asia", "Latin America/Caribbean", "Oceania"} {
    27  		var u mat.Dense
    28  		gsvd.UTo(&u, i)
    29  		s := gsvd.Values(nil, i)
    30  		fmt.Printf("%s\n\ts_%d = %.4f\n\n\tU_%[2]d = %.4[4]f\n",
    31  			n, i, s, mat.Formatted(&u, mat.Prefix("\t      ")))
    32  	}
    33  
    34  	var v mat.Dense
    35  	gsvd.VTo(&v)
    36  	fmt.Printf("\nCommon basis vectors\n\n\tVᵀ =  %.4f",
    37  		mat.Formatted(v.T(), mat.Prefix("\t      ")))
    38  
    39  	// Output:
    40  	//
    41  	// Africa
    42  	// 	s_0 = [45507.3278 18541.9293 21503.0778]
    43  	//
    44  	// 	U_0 = ⎡-0.0005  -0.0039  -0.0019⎤
    45  	// 	      ⎢-0.0010  -0.0007  -0.0012⎥
    46  	// 	      ⎢-1.0000  -0.0507  -0.9964⎥
    47  	// 	      ⎢-0.0022  -0.2906  -0.0415⎥
    48  	// 	      ⎢ 0.0001  -0.0127  -0.0016⎥
    49  	// 	      ⎢ 0.0003  -0.0067  -0.0010⎥
    50  	// 	      ⎢ 0.0003  -0.0022  -0.0003⎥
    51  	// 	      ⎢-0.0086  -0.9550   0.0734⎥
    52  	// 	      ⎢ 0.0017   0.0002   0.0059⎥
    53  	// 	      ⎢-0.0002  -0.0088  -0.0014⎥
    54  	// 	      ⎢-0.0006  -0.0078  -0.0001⎥
    55  	// 	      ⎢-0.0005  -0.0076   0.0003⎥
    56  	// 	      ⎢ 0.0001  -0.0090   0.0008⎥
    57  	// 	      ⎢-0.0005  -0.0050   0.0029⎥
    58  	// 	      ⎢-0.0011  -0.0078  -0.0012⎥
    59  	// 	      ⎢-0.0014  -0.0058  -0.0002⎥
    60  	// 	      ⎢ 0.0007  -0.0095   0.0020⎥
    61  	// 	      ⎢-0.0008  -0.0081  -0.0009⎥
    62  	// 	      ⎢ 0.0004  -0.0092   0.0006⎥
    63  	// 	      ⎢-0.0007  -0.0079  -0.0006⎥
    64  	// 	      ⎣-0.0011  -0.0076  -0.0010⎦
    65  	// Asia
    66  	// 	s_1 = [77228.2804 8413.7024 14711.1879]
    67  	//
    68  	// 	U_1 = ⎡ 0.0005  -0.0080   0.0011⎤
    69  	// 	      ⎢ 0.0008  -0.0108   0.0016⎥
    70  	// 	      ⎢-0.9998   0.0612   0.9949⎥
    71  	// 	      ⎢ 0.0007  -0.5734  -0.0468⎥
    72  	// 	      ⎢ 0.0001  -0.0265  -0.0022⎥
    73  	// 	      ⎢ 0.0001  -0.0165  -0.0019⎥
    74  	// 	      ⎢ 0.0000  -0.0070  -0.0013⎥
    75  	// 	      ⎢ 0.0196  -0.8148   0.0893⎥
    76  	// 	      ⎢ 0.0002  -0.0063   0.0012⎥
    77  	// 	      ⎢-0.0001  -0.0135  -0.0013⎥
    78  	// 	      ⎢-0.0004  -0.0135   0.0019⎥
    79  	// 	      ⎢-0.0005  -0.0132   0.0014⎥
    80  	// 	      ⎢ 0.0003  -0.0155   0.0045⎥
    81  	// 	      ⎢-0.0003  -0.0130   0.0025⎥
    82  	// 	      ⎢-0.0007  -0.0105   0.0016⎥
    83  	// 	      ⎢-0.0006  -0.0129   0.0007⎥
    84  	// 	      ⎢-0.0006  -0.0178  -0.0023⎥
    85  	// 	      ⎢-0.0003  -0.0149   0.0016⎥
    86  	// 	      ⎢-0.0001  -0.0134   0.0030⎥
    87  	// 	      ⎢-0.0004  -0.0154   0.0010⎥
    88  	// 	      ⎣-0.0009  -0.0147  -0.0019⎦
    89  	// Latin America/Caribbean
    90  	// 	s_2 = [274.1364 20736.3116 729.6947]
    91  	//
    92  	// 	U_2 = ⎡ 0.1060  -0.0021   0.0174⎤
    93  	// 	      ⎢ 0.1415  -0.0016   0.0289⎥
    94  	// 	      ⎢ 0.2350  -0.2669  -0.9212⎥
    95  	// 	      ⎢ 0.0290  -0.0118  -0.0429⎥
    96  	// 	      ⎢ 0.0226  -0.0043  -0.0213⎥
    97  	// 	      ⎢ 0.0117  -0.0016  -0.0197⎥
    98  	// 	      ⎢-0.6263  -0.9635   0.2234⎥
    99  	// 	      ⎢ 0.2334  -0.0013   0.1275⎥
   100  	// 	      ⎢-0.0358  -0.0085  -0.0498⎥
   101  	// 	      ⎢-0.1238  -0.0054   0.0313⎥
   102  	// 	      ⎢-0.0421  -0.0059   0.0528⎥
   103  	// 	      ⎢-0.1471  -0.0056   0.0350⎥
   104  	// 	      ⎢-0.2158  -0.0052  -0.0044⎥
   105  	// 	      ⎣-0.6154  -0.0078  -0.2717⎦
   106  	// Oceania
   107  	// 	s_3 = [8954.1914 6942.6316 17233.0561]
   108  	//
   109  	// 	U_3 = ⎡-0.0080  -0.0012  -0.0040⎤
   110  	// 	      ⎢ 0.0004  -0.0014   0.0001⎥
   111  	// 	      ⎢ 0.9973  -0.0315   0.9991⎥
   112  	// 	      ⎢ 0.0473  -0.7426  -0.0359⎥
   113  	// 	      ⎢ 0.0018  -0.0342  -0.0020⎥
   114  	// 	      ⎢-0.0005  -0.0148  -0.0016⎥
   115  	// 	      ⎢-0.0004  -0.0047  -0.0007⎥
   116  	// 	      ⎢-0.0246  -0.6642  -0.0138⎥
   117  	// 	      ⎢ 0.0003  -0.0287  -0.0023⎥
   118  	// 	      ⎢-0.0011  -0.0148  -0.0014⎥
   119  	// 	      ⎢-0.0108  -0.0198  -0.0039⎥
   120  	// 	      ⎢-0.0149  -0.0183  -0.0048⎥
   121  	// 	      ⎢-0.0178  -0.0208  -0.0075⎥
   122  	// 	      ⎢-0.0266  -0.0063  -0.0016⎥
   123  	// 	      ⎢-0.0012  -0.0234  -0.0006⎥
   124  	// 	      ⎢-0.0084  -0.0184  -0.0030⎥
   125  	// 	      ⎢-0.0232  -0.0191  -0.0124⎥
   126  	// 	      ⎢-0.0072  -0.0226  -0.0035⎥
   127  	// 	      ⎢-0.0150  -0.0144  -0.0045⎥
   128  	// 	      ⎢-0.0068  -0.0227  -0.0034⎥
   129  	// 	      ⎣-0.0127  -0.0136  -0.0049⎦
   130  	//
   131  	// Common basis vectors
   132  	//
   133  	// 	Vᵀ =  ⎡-0.0897  -0.4460  -0.8905⎤
   134  	// 	      ⎢-0.4911  -0.5432  -0.6810⎥
   135  	// 	      ⎣ 0.0644   0.2841   0.9566⎦
   136  }