我试图在二叉树上绘制一个简单的变异累积过程的图... 我在gnuplot中的技术问题是,我想绘制在图上特定谱系上获得2个突变的可能性,这里是确定它的等式:
P_ {2突变} =和[k = 0:n](m /(2 **(k + 1)/(1-(1/2)** k)))(1- EXP(-mu k))的
(不要打扰公式我不确定这是正确的:))) 其中n是二叉树的级别数,mu是突变率,m是图形边缘上先前随机抛出的突变的数量...... 我想根据二叉树的级别制作一个这种可能性的情节......
因此我写了一个类似这样的脚本:
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
所以我的问题是,我不知道做我做的事情是否正确 如果声明...... 我想要的是看到m&lt; f(x)其中f(x)是关于n的边数,它是一个整数值因此我使用floor(f(x)),并通过x值求和(这是有多少级别的也是一个整数...所以floor(x),就像一个重要的函数,使x轴离散)总和...
我还收到一条错误消息: gnuplot的&GT;加载'2mutvalsz.plt' 第27行:未定义的变量:x
其中第27行是do for循环的结束......
所以我的问题是,这是一个正确的方法,使求和整数为x值,当然为什么我得到错误信息......
谢谢,我希望一切都清楚......
答案 0 :(得分:1)
产生错误消息是因为当Gnuplot加载脚本时会解释脚本中的if
语句 - 它会尝试评估if
语句的条件,因为变量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;
但是,由于函数f(x)
位于强制x
- 范围[0,1]
小于1
,因此条件m<floor(f(x))
将始终为false。