我对插值函数的一般寻根问题感兴趣。
假设我有以下内容
(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
更多关于
).
如果有一个适应性强且易于使用的解决方案,那就太好了。