绘制部分未定义的函数时遇到问题

时间:2018-04-19 14:45:50

标签: python algorithm matplotlib

我的应用计算机科学课程的任务是测试算法的强度和质量,该算法试图找到列表中的第k个最高值。这将针对变化的k:s(0,1,2,...,k = N)和变化的N:s进行测试,其中我选择了k = 0和N(1,2,..., N)。我们应该确定算法是否比pi * N比较以及log2(N / 2-k)* N比较更多。

为了找到一些清晰度,我做了两个图,两个图都有y轴比较,而k轴和k轴分别为x轴。除了这些图,我想要函数y = pi * N和y = log2(N / 2-k)* N.问题是我得到了第二个函数的ValueError,最明显的是当N / 2 = k时。我仍然想在python中绘制它,我的问题是如何解决这个问题。

其余代码并不真正相关。 我的问题是:如何规避这个功能,同时规避它的未定义部分?我仍然想要说明未定义的部分,所以我不想做出简化的例外。

def plotHelper(x, yA, yS, title, trials):

    yPi = list()
    yLogN = list()

    for point in x:
        yPi.append(point*math.pi)
        yLogN.append((trials*math.log(trials/2 - point, 2)


    plt.figure()
    plt.title(title)

    plt.plot(x, yA)
    plt.plot(x, yS)
    plt.plot(x, yPi)
    plt.plot(x, yLogN)

    plt.grid(True)
    plt.legend(["Mean", "Standard Deviation", "y = pi * N"])
    plt.ylabel("Comparisons")
    plt.xlabel("k")
    plt.show()

def plot():
    choice = initiate()
    yA, yS, trials = trialFunc(choice)
    x = range(0, trials)
    f_of_k = "Comparisons as a function of desired k (N elements)"
    f_of_n = "Comparisons as a function of elements (k = 0)"

    if choice:
        title = f_of_k
    else:
        title = f_of_n

plotHelper(x, yA, yS, title, trials) 

1 个答案:

答案 0 :(得分:1)

如果您不能将函数的值表示为数字,则可以将其表示为非数字也称为NaN。它没有现成的常量,但你可以很容易地产生这个值:

NaN = float('NaN')

现在你的功能可以这样:

def function_to_plot(n):  # A contrived example.
  if abs(n) <= 1:
    return NaN
  return sqrt(n * n - sin(n) ** 2)

之后,matplotlib正常工作,它知道如何跳过NaN点。

如果您只想手动制表功能,可以使用浮动格式安全地打印NaN。

有关详细信息,您可以使用float('+inf')float('-inf')来表示无穷大。 此外,以防万一,Python可以很好地处理复杂的数字; import cmath并执行assert cmath.sqrt(-2j) == (1-1j)等内容。