

GO言語を使って、  
ある行列に対して、  
Singular Value Decomposition(SVD)を行い、Unitary matrix（UやVtなど）の行列を計算したいです。

簡単なコードを書きましたので、それを示した後に、質問をさせていただきます。

[code]

    package main
    
    import (
        // "gonum.org/v1/gonum/blas/blas64"
        // "gonum.org/v1/gonum/lapack"
        // "gonum.org/v1/gonum/lapack/lapack64"
        "gonum.org/v1/gonum/mat"
      "fmt"
    
    )
    
    func main() {
      v1 := []float64{3.0, 2.0, 2.0, 2.0, 3.0, -2.0};
      a := mat.NewDense(2, 3, v1)
    
      svd := new(mat.SVD)
      svd.Factorize(a, mat.SVDFull)
      a.UFromSVD(svd) //<-ここが問題です。
    }
    
[/code]

[ここのサイト](https://github.com/gonum/gonum/tree/master/mat)を参考にSVDのテストを行っております。  
この中に、svd.goがあります。その中で、「Factorize」「UFromSVD」や「VFromSVD」があります。  
上記のコードでは、行列aを作成した後、Factorize(SVDFullのオプション)で計算をしています。最後の行では、U行列を取り出すことを試みていますが、そこで問題が発生しています。

サイトには

[code]

    func (m *Dense) UFromSVD(svd *SVD)
    
[/code]

とありますので、それを参考に上記のようなコード（a.UFromSVD(svd)）を書きました。  
しかし、エラーメッセージが以下のようです。

[code]

    a.UFromSVD undefined (type *mat.Dense has no field or method UFromSVD)
    
[/code]

他のfunction（Kind, Cond）などは正常に動くことを確認しています。  
エラーに「method
UFromSVDがない」とのことなので、UFromSVDの使い方が間違っているとおもいますが、修正の仕方が分からず、どつぼにハマっている状態です。

ここであれば、ご教授をしていただけないかと思い、質問を投稿しました。  
よろしくお願いします。

ちなみに使っているスペックは  
OS: Ubuntu, Go: 1.8.3です。


CC BY-SA 4.0
2020-01-08T03:43:15.363
62053
2020-01-08T03:43:15.363
11048
question
go
go言語でSVDを行いたい