2016-10-02 5 views
0

나는 이진 트리에 간단한 돌연변이 축적 과정의 플롯을 만들려고 노력하고있다 ... gnuplot의 기술적 인 문제는 그것이 특정 돌연변이 2 개를 얻을 가능성을 음모하려는 것이다. 그래프에서 혈통 (lineage)은 다음을 결정하는 방정식입니다 :Gnuplot 합산 문제

P_ {2 변이} = 합계 [k = 0 : n] (m ** (k + 1)/(1- 2) ** K))) (1-EXP (-mu K))

(이 정확한 하나 :)) 아직 확인되지 화학식 IM 신경 그나마 n은 수이다 이진 트리의 레벨, mu는 변이 율, m은 previo의 수입니다.

: usly 무작위 그래프에 돌연변이를 발생

따라서 나는이 같은 것입니다 스크립트를 쓴 ... 나는 이진 트리의 수준에 따라 이러한 가능성있는 플롯을 만들고 싶어 ... 가장자리
set term pngcairo size 800,600 
set title "Két mutáció megjelenésének valószínűsége, egy n szintű bináris fa egyik sejtvonalában" 
set xlabel"szintek száma (n)" 
set ylabel"Két mutáció megjelenésének valószínűsége (P_{2^{lin})" 
set xrange[1:10] 
set yrange[0:1] 

set output '2mutvalsz.png' 

set multiplot 
do for[i=1:10]{ 
mu = 0.1+(i*0.1) 
m = 4 
f(x)=(x/((2**(x+1))*(1-(0.5)**x))) 

    if(m<floor(f(x))) 
    { 
     p(x)=sum [k=0:floor(x)](m*(1/((2**(x+1))*(1-(0.5)**x))))*(1-exp(-mu*k)) 
    } 

    else 
    { 
     p(x)=1 
    } 

plot p(x) lt i lw 1 
} 
unset multiplot 
set output 

그래서 내 문제는 if 문에서 내가 뭘 할 정확한지 내가 아는을 해달라고입니다 ... 는 내가 원하는 것은 문 m < F (x)는 F를 보라하는 것입니다 (X)는 n에 관한 엣지의 수로, 정수 값이므로 floor (f (x))를 사용하고 x 값 (정수의 수를 나타내는 레벨의 수)을 합계합니다. O ... 그래서 층 (X)와, heavyside 함수처럼 ... 합에)

을 x 축 분리를 만들기 위해 또한 I는 오류 메시지 : 의 gnuplot>로드 '2mutvalsz.plt' 라인 27 : 정의되지 않은 변수 : X

라인 (27)은 루프의 할 일의 끝입니다

...

그래서 제 질문은 그게 요약 정수를 만들 수있는 올바른 방법이다

는 x 값 물론 이유 오류 메시지가 나타납니다 ...

고맙습니다. 모든 것이 명확 해지기를 바랍니다.

답변

1

Gnuplot이 스크립트를로드 할 때 if 문이 해석되어 - if 문을 평가하려고 시도하고 변수 x이 정의되지 않았기 때문에 오류 메시지가 표시됩니다. 오류 메시지는 언급 된 메시지를 생성합니다.

당신은으로 삼항 연산자를 사용하여 모든 것을 함께 넣어 수 : f(x)1보다 [0,1] 이하의 부과 x - 범위에있는 기능이 있기 때문에, 그러나

p(x)=(m<floor(f(x)))?(sum [k=0:floor(x)](m*(1/((2**(x+1))*(1-(0.5)**x))))*(1-exp(-mu*k))):1; 

, 조건 m<floor(f(x))는 항상 false가 될 것입니다.

+0

오 ... 예, 내 나쁜 ... 대단히 감사합니다. 덕분에 많은 도움이되었습니다. –