Pyhon求解拟合曲线的曲率
这里提供一个利用曲率公式实现曲率计算的方法,如何实现曲线拟合见上一篇文章
计算原理:曲率公式,由公式可知,只需要知道曲线函数的一阶导和二阶导数,以及所要求的点的坐标即可计算曲率。
用python实现,即:
'''y_1和y_2为函数该点处的一阶导数值和二阶导数值,得到该值,就可进行曲率计算'''
def get_curvature(y_1,y_2):
K = (np.abs(y_2))/(np.sqrt((1 + y_1*y_1))**3)
return K
通过np的ployfit方法可以返回一个函数
# 曲线拟合,这里不多解释,重要的是得到 p1
z1 = np.polyfit(list_x, list_y, 5) # list_x和list_y是需要拟合的点,曲线拟合
p1 = np.poly1d(z1) # 返回值为多项式的表达式,也就是函数式子
print(p1) # p1为所拟合的函数
把p1打印出来如下:
OK,我们能现在只需要对该函数求一阶导和二阶导,然后代入所求坐标点的x值即可得到y_1和y_2,这里我选择求某极值点处的曲率:
p1_min = fmin(p1, 250) # 求函数p1在x=250附近处的极值
p1_1 = np.polyder(p1,1) # 求函数p1的一阶导,返回值p1_1是一个函数表达式,可以打印出来看
p1_2 = np.polyder(p1,2) # 同理,求函数p1的二阶导
p1_1_min = p1_1(p1_min) # 求函数一阶导和二阶导所对应极值点处的值
p1_2_min = p1_2(p1_min)
K = get_curvature(p1_1_min,p1_2_min) # 这个时候利用该函数就可以实现曲率计算了