如何找到多项式拟合通过零的点
How to find the points where a polynomial fit passes through zero
我已将 4 阶多项式曲线拟合到我的数据中,如下所示:
y<-c(-13,16,35,40,28,36,43,33,40,33,22,-5,-27,-31,-29,-25,-26,-31,-26,-24,-25,-29,-23,4)
x<-1:24
#4th order polynomial fit
fit<-lm(y~poly(x,4,raw=TRUE))
plot(x,y,ylim=c(min(y)-10,max(y)+10))
lines(x,predict(fit,data.frame(x=x)),col="red")
abline(h=0,lty=2)
我的最终目标是计算这条曲线与零线相交的 3 个点。
所以首先,我需要延长曲线拟合的末端,使其第三次超过零线。完成此操作后,我想计算该方程通过零线的 3 个点。
您可以使用 predict
函数从您的拟合模型中获取值。例如
pred <- function(x) predict(fit, newdata=data.frame(x=x))
然后如果你想要多个根,你可以使用 rootSolve
包
中的 uniroot.all
之类的函数
rootSolve::uniroot.all(pred, c(0,30))
# 1.428859 11.990087 24.420745
这将从您的模型中找到 0 到 30 之间的根。您还可以多次调用基本函数 uniroot
。
我已将 4 阶多项式曲线拟合到我的数据中,如下所示:
y<-c(-13,16,35,40,28,36,43,33,40,33,22,-5,-27,-31,-29,-25,-26,-31,-26,-24,-25,-29,-23,4)
x<-1:24
#4th order polynomial fit
fit<-lm(y~poly(x,4,raw=TRUE))
plot(x,y,ylim=c(min(y)-10,max(y)+10))
lines(x,predict(fit,data.frame(x=x)),col="red")
abline(h=0,lty=2)
我的最终目标是计算这条曲线与零线相交的 3 个点。
所以首先,我需要延长曲线拟合的末端,使其第三次超过零线。完成此操作后,我想计算该方程通过零线的 3 个点。
您可以使用 predict
函数从您的拟合模型中获取值。例如
pred <- function(x) predict(fit, newdata=data.frame(x=x))
然后如果你想要多个根,你可以使用 rootSolve
包
uniroot.all
之类的函数
rootSolve::uniroot.all(pred, c(0,30))
# 1.428859 11.990087 24.420745
这将从您的模型中找到 0 到 30 之间的根。您还可以多次调用基本函数 uniroot
。