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 总是首先满足。这就是为什么以与原始函数相反的顺序定义条件的原因。
我正在尝试使用 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 总是首先满足。这就是为什么以与原始函数相反的顺序定义条件的原因。