代码之家  ›  专栏  ›  技术社区  ›  Zheyuan Li

给定y值得到x值:线性/非线性插值函数的一般求根

  •  2
  • Zheyuan Li  · 技术社区  · 6 年前

    我对插值函数的一般寻根问题感兴趣。

    假设我有以下内容 (x, y)

    set.seed(0)
    x <- 1:10 + runif(10, -0.1, 0.1)
    y <- rnorm(10, 3, 1)
    

    以及线性插值和三次样条插值:

    f1 <- approxfun(x, y)
    f3 <- splinefun(x, y, method = "fmm")
    

    x y = y0 y0 = 2.85 .

    par(mfrow = c(1, 2))
    curve(f1, from = x[1], to = x[10]); abline(h = 2.85, lty = 2)
    curve(f3, from = x[1], to = x[10]); abline(h = 2.85, lty = 2)
    

    我知道之前关于这个话题的一些线索,比如

    y ,为 (y, x) 并计算 y=y0 .

    然而,这是一个虚假的想法。让 y = f(x) 是的插值函数 (x,y) f(x) 是的单调函数 以便 f 是可逆的。否则 不是 y 和插值 (y,x)

    fake_root <- approx(y, x, 2.85)[[2]]
    # [1] 6.565559
    

    首先,根的数目是不正确的。我们从图中看到两个根(在左边),但是代码只返回一个。其次,它不是一个正确的根,因为

    f1(fake_root)
    #[1] 2.906103
    

    不是2.85。

    How to estimate x value from y value input after approxfun() in R . 对于线性插值,解是稳定的,但对于非线性插值,解不一定是稳定的。我现在正在寻找一个稳定的解决方案,特别是三次插值样条。


    解决方案如何在实践中有用?

    单变量 y ~ x 或者 单变量 非线性回归 y ~ f(x) 我们要退赛 为了一个目标 y Solve best fit polynomial and plot drop-down lines ,但没有一个是真正的适应性或易于在实践中使用。

    • 接受答案使用 polyroot 只适用于简单的多项式回归;
    • 我的答案是 predict uniroot 工作一般,但不方便,如在实践中使用 单根 需要与用户交互(参见 Uniroot solution in R 更多关于 ).

    如果有一个适应性强且易于使用的解决方案,那就太好了。

    2 回复  |  直到 4 年前