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))
将始终假的。
我正在尝试在二叉树上绘制一个简单的突变累积过程图... 我在 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))
将始终假的。