2017-01-12 4 views
0

私の数学は少し基本的なので、前もって何らかの前提条件をお詫びします。ゴランのシミュレートベルカーブの値

シミュレートされたベルカーブに存在する値を取得したいとします。私は実際にベルカーブまたはプロットを作成したくない、私はちょうど入力値を与えられた関数を使用したいと思います私に対応するY軸の値を仮想ベルカーブに教えてください。

はここで完全な問題文のです:

私は0.0と1.0の間の浮動小数点値を生成しています。

0.50はベルカーブの2.0を表し、最大値です。値< 0.50と> 0.50の値がこのベルカーブ上で落ち始めるので、例えば0.40と0.60は同じで、1.8のようになります。この例では、1.8が任意に選択されています。この「グラジエント」をどのように微調整できるかを知りたいと思います。

今、私は非常に粗い実装を行っています。たとえば、0.40以上の値の場合は、関数は2.0を返しますが、これを 'スムーズに'し、降下/勾配

私はここで説明ゴー

+0

この式については、https://en.wikipedia.org/wiki/Gaussian_functionを参照してください。累乗にはmath.Expを使用します。 – Volker

答えて

0

ガウス関数でこれを達成することができますどのように任意のアイデア:https://en.wikipedia.org/wiki/Gaussian_function
は釣鐘曲線形状を有しています。実装例:

package main 
import (
    "math" 
) 

const (
    a = 2.0 // height of curve's peak 
    b = 0.5 // position of the peak 
    c = 0.1 // standart deviation controlling width of the curve 
      //(lower abstract value of c -> "longer" curve) 
) 

func curveFunc(x float64) float64 { 
    return a *math.Exp(-math.Pow(x-b, 2)/2.0*math.Pow(c, 2)) 
} 
+0

恐ろしい!ちょうど私が探していたもの!私はそれと少し演奏した。苦しいことを理解しているIm。 CurfFuncがx = 0.0とx = 1.0の両方で0.0を返すようにしたいので、私はそれを得るまでCの異なる値を試してください。カーブの「勾配」を決めるのは何ですか? (どのくらい速くそれがどちらの端に落ちますか?) – wrecktangle

+0

s/math.Pow(math.E、/math.Exp(/ – Volker

+0

「長い曲線」は、 = 1の場合よりも速く落ちますが、この関数は0にはなりませんが、float64は小数点以下を表すことができないので、実際にはx = 0、x = (しかし、あなたはCの値で遊ばなければならないでしょう)しかし、別の解決策をお勧めします。ピークを3(a = 3)に移動させることができ、curveFunc(0)== 1のときに正規方程式からcを計算します。 * math.Exp(-math.Pow(xb、2)/(2.0 *))を返すと、関数が1から減算されます。 –