[英]How to plot a deadband for a simple sine wave using python
我正在使用下面的代码来绘制正弦波的死区,以便死区出现在 x 轴上为 y=0。 输出通过上限[y-0.5]和下限的值最小化。这里需要显示死区。任何人都可以帮我解决这个问题。
import matplotlib.pyplot as plt
import numpy as np
UpperLimit = 0.5;
LowerLimit = -0.5;
x=np.linspace(-20,20,100);
y=np.sin(x);
if y < 0:
y=np.sin(x)-LowerLimit
if y > 0:
y=np.sin(x)-UpperLimit
else:
y=0
plt.plot(x,y)
plt.grid()
plt.show()
我想你应该使用矢量化值,所以试试这个
import matplotlib.pyplot as plt
import numpy as np
LL = -0.5
UL = 0.5
x=np.linspace(-20,20,100)
y=np.sin(x)
# plot original sine
plt.plot(x,y)
# zero output value for the dead zone
y[(y>=LL) & (y<=UL)] = 0
y[y>UL] -= UL
y[y<LL] -= LL
# plot "simulinked" ....
plt.plot(x,y)
plt.grid()
plt.show()
您需要遍历y
值数组并修改每个值,而不是让if
语句作用于您的数组。 此外,使用y > 0
或y < 0
的if
语句将无法实现您正在寻找的死区结果。 相反,您应该使用y > UpperLimit
或y < LowerLimit
这应该有效:
import matplotlib.pyplot as plt
import numpy as np
UpperLimit = 0.5;
LowerLimit = -0.5;
x=np.linspace(-20,20,100);
y=np.sin(x);
for y_point in np.nditer(y, op_flags=['readwrite']):
if y_point > UpperLimit:
y_point[...] -= UpperLimit
elif y_point < LowerLimit:
y_point[...] -= LowerLimit
else:
y_point[...] = 0
plt.plot(x,y)
plt.grid()
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.