通过Python绘制分段函数

如何利用python绘制分段函数

下面通过整理的两个例子对两种方法进行说明:

例子1

在这里插入图片描述

主要思路是将函数y在各区间的值表示出来。
首先导包

from matplotlib import pyplot as plt
import numpy as np

其次,确定定义域为0~20,总共插值有1000个点

x = np.linspace(0,20,1000)

然后,为了表示分段函数y,通过列表来设置各段的函数自变量x的值

interval0 = [1 if (i<5) else 0 for i in x]
interval1 = [1 if (i>=5 and i<10) else 0 for i in x]
interval2 = [1 if (i>=10) else 0 for i in x]

y = x**2* interval0 + x * interval1 + np.sin(x)*interval2

plt.plot(x,y)
plt.show()

通过Python绘制分段函数_第1张图片

例子2

如果需要画一个周期三角波形,如下图所示:

通过Python绘制分段函数_第2张图片

该怎么做呢?基本想法是将该曲线用一个函数表示出来,函数如下

def triangle_wave(x, c, c0, hc):
    x = x - int(x)  #三角波周期为1 因此只取小数部分进行计算
    if x < c0:
        return x / c0 * hc
    elif x >= c:
        return 0.0
    else:
        return (c-x)/(c-c0)*hc

注:因为图像是一个周期为1的函数,所以在计算函数值时,利用x在1以内的值即可,所以取小数。

from matplotlib import pyplot as plt
import numpy as np

def triangle_wave(x, c, c0, hc):
    x = x - int(x)  #三角波周期为1 因此只取小数部分进行计算
    if x < c0:
        return x / c0 * hc
    elif x >= c:
        return 0.0
    else:
        return (c-x)/(c-c0)*hcx


x = np.linspace(0, 2, 1000)
y = np.array([triangle_wave(t, 0.6, 0.4, 1.0) for t in x]) #根据x计算各点函数值

plt.figure()
plt.plot(x, y)
plt.ylim(-0.2, 1.2)   #限制y的范围
plt.xlim(0, 2)        #限制x的范围
plt.show()

通过Python绘制分段函数_第3张图片

总结

  • 方法1实际上是将要绘制的函数分解为三个区间函数的叠加。三个区间函数在各自有定义的范围内计算函数值,在无定义的地方直接令函数值为0,从而达到计算分段函数的目的。
  • 方法2实际是直接计算分段函数的各点函数值,个人感觉是通用的。
  • 方法2其实可以实现例子1。过程类似,只是修改triangle_wave(x, c, c0, hc)函数为函数function()如下所示,
from matplotlib import pyplot as plt
import numpy as np

def function(x, x1, x2): # x1与x2是分段点位置
    if x < x1:
        return  x**2
    elif x >= x2:
        return np.sin(x)
    else:
        return x


x = np.linspace(0, 20, 1000)
y = np.array([function(t, 5, 10) for t in x]) #根据x计算各点函数值

plt.figure()
plt.plot(x, y)
plt.ylim(-3, 30)   #限制y的范围
plt.xlim(0, 22)   #限制x的范围
plt.show()

通过Python绘制分段函数_第4张图片

更多精彩,请,还有更多小技巧和您交流。
在这里插入图片描述

你可能感兴趣的:(科学计算,python,科学计算,分段函数)