下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:TechFlow     来源: https://www.cnblogs.com/qi-yuan-008/p/12323710.html点击数:3174发布时间: 2020-02-19 15:10:18

标签: python编程语言Python语言

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

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

赞(10)
踩(1)
分享到:
华为认证网络工程师 HCIE直播课视频教程