GNUplot样本和ackermann函数的isosamples

时间:2017-08-25 10:47:48

标签: gnuplot

所以我一直在学习GNUplot,一直困扰我的是样本和等样本率(尤其是在计算Ackermann函数时)。我知道isosample rate应该控制等值线的数量,而另一个则对每个等值线的采样做同样的事情。

此代码绘制了ackermann函数(来源:gnuplot sourceforge)。为什么只有一些特定的样本值和等值样本会生成图?唯一有效的其他值是(4,2)和(2,4)。对于剩余的值,我得到了堆栈溢出或超出递归深度限制。

/** Send email with the specified @paramref body to the addesses given in @paramref to.
@param body Just a plain text or teamplate-aware text.*/ 
def SendEmail(body: EmailBody, to: EmailAddress*) = ???

有人可以解释为什么只有(4,4),(4,2),(2,4)有效吗?

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 如上面的评论所述,您无法评估非整数值的Ackermann函数。如果您的samples / isosamples值与xrange / yrange的长度不完全匹配,那么gnuplot将尝试以非整数值评估函数。您可以通过显式转换为整数来避免这种情况:

    ack(m,n) = (m == 0) ? n + 1 : (n == 0) ? ack(m-1,1) : ack(m-1,ack(m,n-1))
    ack_protected(x,y) = ack(int(x),int(y))
    set xrange [0:3]
    set yrange [0:3]
    set isosamples 50
    set samples 50
    set title "Plot of the ackermann function"
    splot ack_protected(x, y)
    
  2. 给出

    enter image description here

    1. 您也无法评估Ackermann函数的整数值(m,n)是否超过gnuplot的递归限制,即250.组合m = 4,n = 3已超过该限制。