从R中的smooth.spline计算曲率

5
有没有办法在R中使用平滑的spline曲线(或类似曲线)从一组x,y点计算特定点的曲率?
谢谢您的帮助。

可能是 ?splinefun ? - ckluss
1个回答

8

如果您知道由 smooth.spline()创建的对象有一个predict()方法,并且该方法具有一个参数deriv,允许您预测给定导数(在此情况下需要第二个导数),而不是样条线上的点,则实际上这很容易。

 cars.spl <- with(cars, smooth.spline(speed, dist, df = 3))
 with(cars, predict(cars.spl, x = speed, deriv = 2))

这将会产生:

$x
 [1]  4  4  7  7  8  9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
[26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25

$y
 [1] -6.492030e-05 -6.492030e-05  3.889944e-02  3.889944e-02  5.460044e-02
 [6]  7.142609e-02  6.944645e-02  6.944645e-02  6.944645e-02  9.273343e-02
[11]  9.273343e-02  1.034153e-01  1.034153e-01  1.034153e-01  1.034153e-01
[16]  5.057841e-02  5.057841e-02  5.057841e-02  5.057841e-02  1.920888e-02
[21]  1.920888e-02  1.920888e-02  1.920888e-02  1.111307e-01  1.111307e-01
[26]  1.111307e-01  1.616749e-01  1.616749e-01  1.801385e-01  1.801385e-01
[31]  1.801385e-01  1.550027e-01  1.550027e-01  1.550027e-01  1.550027e-01
[36]  2.409237e-01  2.409237e-01  2.409237e-01  2.897166e-01  2.897166e-01
[41]  2.897166e-01  2.897166e-01  2.897166e-01  1.752232e-01  1.095682e-01
[46] -1.855994e-03 -1.855994e-03 -1.855994e-03 -1.855994e-03  4.478382e-05

其中$y是拟合样条的二阶导数,在用于拟合样条的数据中评估speed值时得出。当然,您可以在此处插入任何想要的值,例如在speed范围内等间距分布的100个值。例如:

newspeed <- with(cars, seq(min(speed), max(speed), length = 100))
curvature <- predict(cars.spl, x = newspeed, deriv = 2)

plot(curvature, type = "l")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接