【问题标题】:Plotting function for specified intervals in python matplotlibpython matplotlib中指定间隔的绘图函数
【发布时间】:2018-12-29 06:25:42
【问题描述】:

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

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

有人知道怎么弄吗?

我的 sn-p 代码:

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)

【问题讨论】:

  • 在一个区间上积分的结果是一个数字。你想绘制那个数字吗?
  • 我试图在区间而不是积分中绘制函数。另外,我正在寻找一种替代解决方案,最好以象征性的方式,就像在图中一样。我找不到可以指定符号 x 的解决方案,然后对于不同的函数区间有不同的表达式
  • 您用 matplotlib 和 scipy 标记了这个问题,并使用 scipy 方法进行集成。这些是数字工具。对于符号数学,请参阅其他包。但是,对于问题中描述的任务,数字工具完全可以。

标签: python matplotlib plot scipy intervals


【解决方案1】:

我假设您想要绘制函数 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。这就是为什么以与原始函数相反的顺序定义条件的原因。

【讨论】:

  • 您知道是否可以使用 sympy 以符号方式定义带区间的相同函数?
  • @Xzm 当然,我已经更新了我的答案以包含该函数的符号版本。
猜你喜欢
  • 2021-03-28
  • 2011-01-13
  • 2010-11-27
  • 1970-01-01
  • 2016-08-21
  • 2016-05-26
  • 1970-01-01
  • 2013-06-14
  • 2014-02-09
相关资源
最近更新 更多