使用<double> BfgsSolver 时 F# 中的矢量与双精度矢量错误



我正试图在我写的一个简单测试用例中使用MathNet.Numberics的BfgsSolve方法,但我遇到了类型不匹配的问题。

这是我的代码:

#r "nuget: MathNet.Numerics, 5.0.0-alpha08"
#r "nuget: MathNet.Numerics.FSharp, 5.0.0-alpha08"
open MathNet.Numerics.Optimization 
open MathNet.Numerics.LinearAlgebra

let vecGuess = vector [double 1.0]
let sineFuncTest (x : Vector<float>) = 
let xval = x.[0]
System.Math.Sin (xval ** 2.0  - 1.0 )
let sinegrad (x : Vector<float>) = 
let xval = x.[0]
vector [2.0 * xval * (System.Math.Cos (xval ** 2.0 - 1.0))]
let result = BfgsSolver.Solve (vecGuess, sineFuncTest ,sinegrad)

但是BfgsSolve函数不会接受我的vecGuess变量。我得到的错误是:error FS0001: The type 'Vector<double>' is not compatible with the type 'Double.Vector'

两者之间有什么区别?我尝试创建Double.Vector类型,但失败了。

谢谢。

如果您创建这样的猜测,它将编译并运行:

open MathNet.Numerics.LinearAlgebra.Double
let vecGuess = DenseVector [|1.0|]

不过,我不知道答案是否正确。请参阅此SO问题以获取类似的示例。

最新更新