科学计算-----第二天4

绘制三角波,方波。

import numpy as np
import pylab as pl

#三角波:上升段、下降段、平坦段
def triangle_wave(x,c,c0,hc):
    x=x-int(x)
    if x>=c: r=0.0
    elif x<c0: r=x/c0*hc
    else: r=(c-x)/(c-c0)*hc
    return r

#这是一种画三角波的方法
x=np.linspace(0,10,10000)
#y1=np.array([triangle_wave(t,0.6,0.4,1.0) for t in x])
#pl.plot(x,y1)

#fromfunc 将计算单个值的函数转换为一个能对数组中每个元素进行计算的func函数
#fromfunc(func,nin,nout) nin是func输入的参数,nout是func返回值的个数
#triangle_ufunc1=np.frompyfunc(triangle_wave,4,1)
#y2=triangle_ufunc1(x,0.6,0.4,1.0)
#y2=y2.astype(np.float) #将其类型从object转换为float
#pl.plot(x,y2)

#vectorize功能同fromfunc
#triangle_ufunc2=np.vectorize(triangle_wave,otypes=[np.float])
#y3=triangle_ufunc2(x,0.6,0.4,1.0)
#pl.plot(x,y3)
#---------------------------------------------------------------
#同理绘制方波
def square_wave(x,T,Um):
    r=x%T #除以周期的余数
    if T/2>=r>=0: u=Um
    elif T>=r>=T/2: u=-Um
    return u

#triangle_ufunc2=np.vectorize(square_wave,otypes=[np.float])
#y3=triangle_ufunc2(x,1,1.0)
#pl.plot(x,y3)
#---------------------------------------------------------------
def rect_wave(x,T,Um):
    r=x%T #除以周期的余数
    if T/2>=r>=0: u=Um
    elif T>=r>=T/2:u=0
    return u
triangle_ufunc2=np.vectorize(rect_wave,otypes=[np.float])
y3=triangle_ufunc2(x,1,1.0)
pl.plot(x,y3)
#疑问? 矩形波与方波是一回事吗?

发布了53 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37083038/article/details/102767609