2017-01-12 1 views
0

수학은 약간 초보 다. 그래서 나는 사전에 모든 가정에 대해 사과한다.골란의 시뮬레이션 된 종곡 곡선의 값

시뮬레이트 된 벨 곡선에있는 값을 가져 오려고합니다. 종 곡선 또는 플롯을 실제로 만들고 싶지 않습니다. 입력 값을 제공하면 가상의 종 곡선에서 해당 Y 축 값을 알 수있는 함수를 사용하고 싶습니다.

I 0.0과 1.0 사이의 부동 소수점 값 생성하고 :

다음은 전체 문제 설명입니다.

0.50은 벨 곡선에서 2.0을 나타내며 최대 값이다. 값이 < 0.50 및> 0.50 값이이 종형 곡선에서 떨어지기 시작합니다. 예를 들어 0.40과 0.60은 동일하며 1.8과 같을 수 있습니다. 이 예제에서는 1.8을 임의로 선택했으며이 '그래디언트'를 조정할 수있는 방법을 알고 싶습니다.

지금 당장은 매우 조잡한 구현을하고 있습니다. 예를 들어, 0.40보다 큰 값과 < 0.60에서는이 함수가 2.0을 반환하지만 '부드럽게'하고 강하/

내가 여기에 설명 된 이동

+0

수식은 https://en.wikipedia.org/wiki/Gaussian_function을 참조하십시오. exponentiation에 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

굉장! 그냥 내가 뭘 찾고 있었는지! 나는 그걸로 약간 연주했다. 나는 힘든 시간을 이해하는 데 c. CurfFunc는 0.0 = 0.0과 x = 1.0 모두 0.0을 반환하고 싶습니다. 그래서 그 값을 얻을 때까지 C의 다른 값을 시도해야합니까? 곡선의 '기울기'를 결정하는 것은 무엇입니까? (어느 쪽이 빠를까요?) – wrecktangle

+0

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

+0

"더 긴 커브"는 느리게 떨어지는 것을 의미합니다 (예 : C = 1)이 함수는 0에 도달하지 않지만 float64는 작은 분수를 나타낼 수 없으므로 함수는 실제로 x = 0 및 x = 0에서 0을 반환합니다. 1 (그러나 당신은 C 값을 가지고 놀아야 할 것입니다.)하지만 다른 해결책을 권합니다. 피크를 3 (a = 3)으로 움직일 수 있습니다. 그런 다음 curveFunc (0) == 1 일 때 정규 방정식에서 c를 계산하십시오. 당신이 C를 얻을 때 함수에서 1을 빼면 –