Gnuplot 求和问题

Gnuplot summation issue

我正在尝试在二叉树上绘制一个简单的突变累积过程图... 我在 gnuplot 中的技术问题是,我想在图表上的特定谱系上绘制获得 2 个突变的可能性,这是确定它的方程式:

P_{2 突变} = 总和[k=0:n] (m/(2**(k+1)/(1-(1/2)**k)))(1-exp(-muk))

(不要为公式烦恼,我不确定这是不是正确的:)) 其中 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< f(x),其中 f(x) 是关于 n 的边数,它是一个整数值,因此我使用 floor(f(x)),并通过 x 求和总和中的值(这是级别数,也必须是整数...所以 floor(x),就像使 x 轴离散的重边函数)...

而且我还收到一条错误消息: gnuplot> 加载 '2mutvalsz.plt' 第 27 行:未定义的变量:x

第 27 行是 do for 循环的结尾...

所以我的问题是,对 x 值求和整数是否是正确的方法,当然还有为什么我收到错误消息...

谢谢,我希望一切都清楚...

错误消息的产生是因为 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)[0,1] 小于 1 的强加 x 范围内,条件 m<floor(f(x)) 将始终假的。