代码之家  ›  专栏  ›  技术社区  ›  Márton Demeter

Gnuplot求和问题

  •  0
  • Márton Demeter  · 技术社区  · 8 年前

    我试图在一棵二叉树上绘制一个简单的突变累积过程图。。。 我在gnuplot中的技术问题是,我想在图上绘制一个特定谱系上发生2个突变的可能性,这是决定它的方程:

    P_{2突变}=和[k=0:n](m/(2**(k+1)/(1-(1/2)**k)) (1-exp(-亩 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
    

    所以我的问题是,我不知道在 if语句。。。 我想看到的是声明m<f(x),其中f(x。。。

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

    其中第27行是do-for循环的结尾。。。

    所以我的问题是,这是一种将x值作为求和整数的正确方法吗?当然,为什么我会得到错误消息。。。

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   ewcz    8 年前

    if 当Gnuplot加载脚本时,会解释脚本中的语句-它尝试计算 如果 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)) 总是错误的。