查找给定y值的x值

时间:2018-06-21 10:18:04

标签: r spline

对于给定的x,y系列,我需要拟合样条曲线。然后在给定的y值(例如0.65)下,我想绘制一个切线并提取其对应的x值。我使用smooth.spline函数拟合曲线。

spl <- smooth.spline(y ~ x)

我的数据在下面。任何帮助我应该怎么做。

structure(list(x = c(0.55, 0.575, 0.6, 0.625, 0.65, 0.675, 0.7, 
0.725, 0.75, 0.775, 0.8, 0.825, 0.85, 0.875, 0.9, 0.925, 0.95, 
0.975, 1, 1.025, 1.05, 1.075, 1.1, 1.125, 1.15, 1.175, 1.2, 1.225, 
1.25, 1.275, 1.3, 1.325, 1.35), y = c(0, 0.004065041, 0.02173913, 
0.067164179, 0.166666667, 0.357142857, 0.642857143, 0.907407407, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1)), .Names = c("x", "y"), class = "data.frame", row.names = c(NA, 
-33L))

here也有类似的解决方案!但是在此示例中,新数据是x轴上的点,而在我的情况下,新数据是y轴上的点。

1 个答案:

答案 0 :(得分:1)

您可以使用unitroot查找y匹配的点:

x <- seq(0,40)
y <- pnorm(seq(0,40), mean=25, sd=5)
spl <- smooth.spline(y ~ x)

newy <- 0.85
newx <- uniroot(function(x) predict(spl, x, deriv = 0)$y - newy,
                interval = c(0, 40))$root

plot(x, y)
lines(spl, col=2)
points(newx, newy, col=3, pch=19)

enter image description here

关于算法,我们从?uniroot中获得:

  

uniroot()使用Fortran子例程“ zeroin”(来自Netlib)基于   下面参考中给出的算法。他们假设一个连续的   函数(然后知道它至少有一个根   间隔)。

     

[...]

     

基于http://www.netlib.org/c/brent.shar中的“ zeroin.c”。

     

[...]

     

Brent,R.(1973)不带导数的最小化算法。   新泽西州恩格尔伍德悬崖(Englewood Cliffs):普伦蒂斯·霍尔(Prentice-Hall)。

另请参阅https://en.wikipedia.org/wiki/Brent%27s_method