2014-03-04 3 views
1

이것은 직접 프로그래밍 문제가 아니라 수학적 문제 일 수 있습니다.임의의 커브 생성

저는 스크립트에서 제품에 대한 시장의 관심을 시뮬레이션하는 커브를 만들려고합니다 (시뮬레이션 게임을 만들고 있습니다).

충족되어야 일부 CRITERIAS있다

곡선은 랜덤
  • 발생되어야
    • 곡선은 곡선을 증가 또는 감소시킬 수있는 X 축 (16)의 단계를 갖는다 각 단계의 커브가 Y 축 (100) 단계가
    • 위한
    • 곡선은 Y에 어딘가에 시작 x 축의 0 단계부터 시작해야합니다.
    • 증분과 감소는 현실적이어야합니다. 즉, 커다란 증감/감소/감소가 발생할 가능성은 더 적지 만 매 단계마다 약간 증가 또는 감소해야 함을 의미합니다.

    내가 달성하기 위해 노력하고있어에 관해서는 데모로 다음과 같은 이미지를 고려 enter image description here

    내 원래 생각은 각 단계에 내가 증가 할 것 또는 임의의 숫자, 더 높은 전류를 감소이었다 단계는 커브가 떨어질 가능성이 높지만 단계에 대한 과감한 변경과 같은 아이디어에는 약간의 오류가 있습니다.

    나는 이것이 PHP이지만, 이론은 임의의 프로그래밍 언어, 임의의 그래프를 임의의 그래프를 생성하는 가장 좋은 방법으로 적용해야한다고 코딩하고있다.

    결국 데이터를 저장할 수 있도록 그래프의 실제 숫자 만 필요합니다.

    $graph = array('Americas' => array(0, 15, 20, 33, 34, 38, 47, 52, 60, 65, 73, 23, 18, 12, 16, 18, 22)); 
    
  • +0

    PHP로이 작업을 수행해야합니까? 그래프를 잘 처리하는'Javascript' 프레임 워크와 플러그인이 많이 있습니다. 'javascript'를 원하지 않는다고해도 간단한 데이터로 아름다운 차트를 출력 할 수있는'PHP' 라이브러리가 있습니다. – ex3v

    +0

    내가 물어서 기뻐. 내 문제는 그래프를 표시하지 않습니다. 쉬운 부분입니다. 결과적으로 그래프에서 실제 수치 만 가져와야합니다. 이 질문을 내 질문에 추가하겠습니다. 번호는 데이터베이스에 저장되어야합니다. – Jazerix

    답변

    3

    시장의 설명에 일상적으로 사용되는 것은 기하학적 인 브라운 운동입니다. 추상적 인 관점에서이 확률 미분 방정식

    dX(t)=X(t)*[ r*dt+s*dB(t) ] 
    
    R은 드리프트 또는 평균 증가율이다

    의해 정의되며, S는 분산 또는 휘발성 및 dB (t)는 정규 분포 N (0 따르는 확률 변수이다, dt).

    X(t+Δt)=X(t)*[ 1+r*Δt±s*√(Δt) ] 
    

    으로이 기호를 이산화 할 수 있으며 여기서 기호는 확률 0으로 임의로 선택됩니다.각 방향으로 5. 이것은 매우 작은 Δt의 값에 대해 잘 작동합니다. 더 큰 단계를 위해

    X(t+Δt)=X(t)*[ 1+r*Δt+s*z(t)*√(Δt) ] 
    

    여기서, 임의 변수 z (t)는 표준 정규 분포를 따른다. 더 복잡한 방법에 대한

    는 "고통스러운 통증이없는 금융 계산"[1]

    [1] LutzL 및 Nishanth에 의해 주어진 http://cs.uwaterloo.ca/~paforsyt/agon.pdf

    +0

    오른쪽. 기본적으로 * 증분 (반환) *은 정상이며 결과적으로 * 곡선 (가격) *에 대한 로그 정규 분포가됩니다. 그러므로 기하학적 인 브라운 운동. – Nishanth

    +0

    예, 이것이 일반적인 철학입니다. Δt에 대한 증가분을 Δt/N에 걸친 작은 증분의 합으로 분해하고 이러한 작은 증분이 유한 분산으로 동일하게 분포되면 작은 분포가 무엇인지에 관계없이 누적 증분은 대략 대략 정규 분포를 갖습니다 큰 수의 법. 그래서 Mandelbrot과 "Black Swan"Taleb는 대안 모델로서 유한 분산이없는 분포를 사용합니다. – LutzL

    1

    당신은 Markov Chain으로이를 구현할 수 있습니다 (책임의 한계와 법적 고지, 타격의 예를, 그래프를 기반으로하지 않는) : 나는 하나 개의 배열과 같이 여러 그래프를 저장할 수 있도록 나는, 다중 차원 배열을 생각했다 마르코프 체인

    (원칙적으로 모두 비슷하지만)/random walk는 - 모델 - 당신은 당신의 필요 조건 (스텝 크기 변경 등의 비율) 랜덤 워크 (random walk)에 대한

    에 따라 전이 확률을 가진 100 × 100 매트릭스가 필요합니다 적절한 단계에서 추출한 임의의 변수로 다음 단계 요구에 따른 스트라이핑.

    0

    대답은 완전히 올바른 &를 내가 여기에 제공하는 모든 것을 볼 단순화. 제안을 구현하는 한 가지 방법은 다음과 같습니다. 난수 목록을 생성 한 다음 누적 합계를 유지하여 플롯 할 데이터를 생성합니다. 즉, 목록 x[0], x[1], x[2], ..., x[n - 1]이 주어진다면 x[0], x[0] + x[1], x[0] + x[1] + x[2], ..., x[0] + x[1] + x[2] + ... + x[n - 1]을 계산하고 그 음모를 그립니다.

    난수 x[0], x[1], x[2], ..., x[n - 1]은 거의 모든 배포에서 가져올 수 있습니다. 귀하의 목적을 위해 균일 한 분포가 좋을 수도 있습니다 (숫자를 더 크게 또는 더 작게 만들기 위해 축척 계수를 곱한 것일 수도 있음). x[0]을 일정한 오프셋으로 설정하십시오 (그렇지 않으면 플롯이 x 축 중심에 위치 함). 다른 분포를 선택하면 구성된 부분 합계의 이론적 속성이 변경되지만 이는 사용자 목적에 중요하지 않습니다.