最终数据点相对于图形的其余部分移动,包括绿色的参考图,没有平滑显示预期的最终数据点
我尝试过使用其他方法(如scipy)平滑数据
import tkinter
import matplotlib.pyplot as plt
import math as m
import numpy as np
warmup = 30
starttemp = 120
waittime = 10
soaktime = 15
endtemp = 210
heatrate = 10 # x/min
one = 1
temprange = endtemp - starttemp
time = ((temprange//heatrate)*60)
#time in seconds from start to end temp
y = list(range(1,warmup,1))
x = temprange/heatrate
wur = list(range(warmup, starttemp,1))
interval = int(temprange//time)
methtime = list(range(starttemp,endtemp,1))
#integrate heating rate functionality into the
#projection graph by adding interval variable.
for _ in range(one):
y.extend(wur)
for _ in range(soaktime):
y.append(starttemp)
for _ in range(waittime):
y.append(starttemp)
for _ in range(one):
y.extend(methtime)
def smooth(y, box_pts):
box = np.ones(box_pts)/box_pts
y_smooth = np.convolve(y, box, mode='same')
return y_smooth
#plt.plot(y,'g--')
plt.plot(smooth(y,15), 'r--', lw=1)
plt.ylabel('Temperature')
plt.xlabel('Time')
plt.title('PID Control Graph For Current Method')
plt.show()
最终数据点应遵循数据的一般趋势,并在正确的结束温度下结束
它应该是什么样子:https://imgur.com/90rHKaA 它目前的样子:https://imgur.com/NB5OXtI
盒卷积函数超出了数据范围,因此可以看到“边缘效应”。这是卷积的基本问题
您可以缩短输出范围with mode ‘valid’
您还可以多次重复最后一个数据点(对应于方框宽度),以最小化此影响并获得完整的输出范围(使用最后一个值而不是零填充)
也许还有一种方法——如果可能的话,将“左侧”卷积函数应用于最后的条目以连接结果
相关问题 更多 >
编程相关推荐