python matplotlib 中指定间隔的绘图函数

Plotting function for specified intervals in python matplotlib

我正在尝试使用 Python 从 link 复制数学运算。

我设法集成了该函数,但我无法在指定的时间间隔内绘制它。我试过使用 arrange 来获取参数的值并将其绘制到函数中,但它不起作用。

有人知道如何让它工作吗?

我的代码片段:

from scipy.integrate import quad

def f(x):
    if x >= 0 and x <= 2:
        return x ** 2

    elif x > 2 and x <= 4:
        return 4

    else:
        return 0

 res = quad(f, 0, 5)

 print(res)

我假设您想绘制函数 f(x),而不是对其积分的结果。为此,您需要创建一个 x 值列表(听起来像您这样做的),为每个值计算 f,然后使用 matplotlib 的 plot 函数显示结果。

a运行ge 的文档说 "When using a non-integer step, such as 0.1, the results will often not be consistent. It is better to use linspace for these cases." 您可能希望在 x 中使用非整数步长进行绘图,否则您将使用绘图的大部分细节。所以我建议切换到 linspace。

import numpy as np 
from matplotlib.pyplot import plot 

xvals = np.linspace(0,6,100) #100 points from 0 to 6 in ndarray
yvals = list(map(f, xvals)) #evaluate f for each point in xvals 

plot(xvals, yvals)

很可能您 运行 遇到问题是直接将您的函数 f 应用于 ndarray。按照它的编写方式,f 期望将单个值作为输入而不是数组。 Map 通过将 f 分别应用于 ndarray 中的每个值来解决这个问题。

编辑:使用 sympy 符号函数

你也可以在sympy中定义一个分段函数。对于您要在问题中完成的事情,这与使用所描述的原始方法没有任何不同。但是,如果您想对您的函数进行进一步的符号操作,这可能会有用。

import sympy

x = sympy.symbols('x') 
f = sympy.Piecewise((0, x>4),(4, x>2) ,(x**2, x>=0)) #defines f as a symbolic function
sympy.plot(f, (x, 0,6)) #Plots f on the interval 0 to 6 

注意在分段函数的定义中,条件是按顺序求值的,所以你定义它们的顺序很重要。例如,如果您交换前两个条件,则永远不会达到 x>4 条件,因为 x>2 总是首先满足。这就是为什么以与原始函数相反的顺序定义条件的原因。