0

FFT アルゴリズムの Math.NET 数値実装を使用しようとしていますが、出力が常に単位であるため、何か間違ったことをしているに違いありません。

セットアップは次のとおりです。

open MathNet.Numerics
open MathNet.Numerics.Statistics
open MathNet.Numerics.IntegralTransforms
let rnd = new Random()
let rnddata = Array.init 100 (fun u -> rnd.NextDouble())
let x = rnddata |> Array.Parallel.map (fun d -> MathNet.Numerics.complex.Create(d, 0.0) )

次に、これを実行すると:

let tt = MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward(x, FourierOptions.Default)

以下に空の出力が表示されますか?

val tt : unit = ()

理由はありますか?

4

1 に答える 1

1

メソッドは結果を入力配列に格納すると思いますFourier.BluesteinForward(元の配列を上書きすることにより)。

変換を実行した後に入力が必要ない場合はx、結果を使用して読み取ることができます (これにより、メモリのコピーが節約されます。これが、Math.NET が既定で行う理由です)。それ以外の場合は、配列を複製して、次のようなより機能的なスタイルのコードでラップできます。

let bluesteinForward input = 
  let output = Array.copy input
  MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward
    (output, FourierOptions.Default)
  output
于 2015-03-29T15:22:57.000 に答える