Python是一种解释型脚本语言,可以应用于以下领域:
web和Internet开发
科学计算和统计
人工智能
教育
桌面界面开发
后端开发
网络爬虫
python求极值点主要用到scipy库。
1.首先可先选择一个函数或者拟合一个函数,这里选择拟合数据:np.polyfit
importpandasaspd
importmatplotlib.pyplotasplt
importnumpyasnp
fromscipyimportsignal#滤波等
xxx=np.arange(0,1000)
yyy=np.sin(xxx*np.pi/180)
z1=np.polyfit(xxx,yyy,7)#用7次多项式拟合
p1=np.poly1d(z1)#多项式系数
print(p1)#在屏幕上打印拟合多项式
yvals=p1(xxx)
plt.plot(xxx,yyy,'*',label='originalvalues')
plt.plot(xxx,yvals,'r',label='polyfitvalues')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.legend(loc=4)
plt.title('polyfitting')
plt.show()
得到的图形是:
2.求波峰值,也就是极大值,得到:signal.find_peaks
#极值
num_peak_3=signal.find_peaks(yvals,distance=10)#distance表极大值点的距离至少大于等于10个水平单位
print(num_peak_3[0])
print('thenumberofpeaksis'+str(len(num_peak_3[0])))
plt.plot(xxx,yyy,'*',label='originalvalues')
plt.plot(xxx,yvals,'r',label='polyfitvalues')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.legend(loc=4)
plt.title('polyfitting')
foriiinrange(len(num_peak_3[0])):
plt.plot(num_peak_3[0][ii],yvals[num_peak_3[0][ii]],'*',markersize=10)
plt.show()
3.在可导的情形下,可以求导来求极值点,同时得到极大值和极小值点:np.polyder
yyyd=np.polyder(p1,1)#1表示一阶导
print(yyyd)
此时:yyyd.r即可就得导数为0的点,可以与上述的极大值点对应比较
4.直接函数分别求极大值和极小值:signal.argrelextrema函数
print(yvals[signal.argrelextrema(yvals,np.greater)])#极大值的y轴,yvals为要求极值的序列
print(signal.argrelextrema(yvals,np.greater))#极大值的x轴
peak_ind=signal.argrelextrema(yvals,np.greater)[0]#极大值点,改为np.less即可得到极小值点
plt.plot(xxx,yyy,'*',label='originalvalues')
plt.plot(xxx,yvals,'r',label='polyfitvalues')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.legend(loc=4)
plt.title('polyfitting')
plt.plot(signal.argrelextrema(yvals,np.greater)[0],yvals[signal.argrelextrema(yvals,np.greater)],'o',markersize=10)#极大值点
plt.plot(signal.argrelextrema(yvals,np.less)[0],yvals[signal.argrelextrema(yvals,np.less)],'+',markersize=10)#极小值点
plt.show()
##-----end------
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
上一篇:Python应用:初识集成学习
下一篇:编程语言的Istio分层架构
¥399.00
¥29.00
¥498.00
¥299.00