Python应用:python求极值点(波峰波谷)

    作者:TechFlow更新于: 2020-02-19 15:10:14

    大神带你学编程,欢迎选课

      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()

      得到的图形是:

    Python应用:python求极值点(波峰波谷)_python_编程语言_Python语言_课课家

      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),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

课课家教育

未登录