python matplotlib

时间:2018-07-20 22:16:31

标签: python matplotlib plot scipy intervals

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

我设法集成了功能,但无法在指定的时间间隔内绘制它。我试图使用安排来获取参数值并将其相对于函数进行绘制,但是它不起作用。

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

Link - Mathcad capture

我的代码段:

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)

1 个答案:

答案 0 :(得分:2)

我假设您想绘制函数f(x),而不是对其进行积分的结果。为此,您将需要创建一个x值的列表(类似您的声音),为每个值计算f,然后使用matplotlib的plot函数显示结果。

arange的文档说:“当使用非整数步骤(例如0.1)时,结果通常将不一致。对于这些情况,最好使用linspace。”您可能希望在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。这就是为什么条件与原始功能的定义顺序相反的原因。