绘制自制的分段函数变得一团糟

时间:2018-10-26 12:51:55

标签: python function matplotlib plot

我需要绘制一个定义如下的自制分段函数:

import numpy as np
import matplotlib.pyplot as plt
def f(x):
    if x >=0 and x <=1:  
        return  2*np.sqrt(x)
    elif x > 1:
        return 1+x

x = np.linspace(0.0, 100)
plt.plot(x, f(x))
plt.show()

错误消息是: ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all() 然后,我遵循了python的建议,并将函数的实现更改为:

def f(x):
    if x.all() >=0 and x.all() <=1:  
        return 2*np.sqrt(x)
    elif x.all() > 1:
        return 1+x

这一次,该图出现了,但不是所定义的功能所意图的曲线。这是错误的曲线。它只是绘制了2 * np.sqrt(x)部分。我真的可以使用一些帮助,非常感谢任何伸出援助之手。

1 个答案:

答案 0 :(得分:0)

如果您的意图是分段函数,则应使用np.where()

def f(x):
    return np.where(np.logical_and(x >= 0, x <= 1), 2*np.sqrt(x), x+1)

x = np.linspace(0.0, 100)
plt.plot(x, f(x))

或仅使用列表理解

def f(x):
    if x >=0 and x <=1:  
        return  2*np.sqrt(x)
    elif x > 1:
        return 1+x

x = np.linspace(0.0, 100)
plt.plot(x, [f(i) for i in x])

此外,您可能希望通过将num的{​​{1}}参数设置得更高来获得更多的绘图样本