我想计算局部曲率,即每个点的曲率。我有一组数据点,在x上等距,下面是生成曲率的代码。在
data=np.loadtxt('newsorted.txt') #data with uniform spacing
x=data[:,0]
y=data[:,1]
dx = np.gradient(data[:,0]) # first derivatives
dy = np.gradient(data[:,1])
d2x = np.gradient(dx) #second derivatives
d2y = np.gradient(dy)
cur = np.abs(d2y)/(1 + dy**2))**1.5 #curvature
下面是曲率图像(洋红色)及其与分析(方程式:-0.02*(x-500)**2 + 250
)(纯绿色)的比较
为什么两者之间会有这么大的偏差?如何得到精确的分析值。在
感谢帮助。在
我一直在玩你的值,我发现它们不够平滑,无法计算曲率。事实上,即使是一阶导数也有缺陷。 原因如下:
你可以看到蓝色的你的数据看起来像一条抛物线,它的导数应该看起来像一条直线,但事实并非如此。当你取二阶导数时,情况会变得更糟。在红色中,这是一条平滑的抛物线,用10000个点计算(尝试用100个点计算,效果相同:完美的直线和曲率)。 我做了一个小脚本来“丰富”你的数据,人为地增加了点数,但只会变得更糟,如果你想试试的话,这里是我的脚本。在
我的建议是用一条抛物线插值数据,并在插值上计算尽可能多的点。在
相关问题 更多 >
编程相关推荐