多项式拟合求导得拐点
http://liao.cpython.org/scipy17/
import numpy as np
from matplotlib import pyplot as plt
from scipy.misc import derivativedef ax_bfit(x0, y0, calculate_x, n):# x = symbols('x')x=np.array(x0)y=np.array(y0)calculate_x=np.array(calculate_x)# 得出方程p1fit_coef=np.polyfit(x,y,n)p1 = np.poly1d(fit_coef)guaidianDict={}# 求导 1-10for i in range(0, len(y0)-1):daoValue=(derivative(p1, i, dx=1e-6))if 0==round(daoValue):guaidianDict[i]=y0[i]print('拐点 横坐标:值')print(guaidianDict)# 拐点值guaidianValueList=list(guaidianDict.values())# 判断是否相差大于1000resultList=[]for i in range(0,len(guaidianValueList)):if i <(len(guaidianValueList)-1):nexti=i+1# 条件if abs(guaidianValueList[i]-guaidianValueList[nexti])>=0:resultList.append('True')print('符合条件的个数')print(resultList)if resultList.count('True')>=3:resultStr=Trueelse:resultStr=False# 预测值calculate_y=np.polyval(fit_coef,calculate_x)return calculate_y,resultStrif __name__ == '__main__':x=[0,1,2,3,4,5,6,7,8]y=[3,4,3,2,3,4,3,2,3]calculate_y,resultStr=ax_bfit(x, y, x, 8)print('拟合值---')print(calculate_y)print('结果')print(resultStr)plt.scatter(x, y, c='g', label='before_fitting') # 散点图plt.plot(x, calculate_y, 'b--', label='fitting')plt.xlabel('x')plt.ylabel('y')plt.legend()plt.show()
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
